TPE
Tavvafi@gmail.com |
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
Sub TitlesToText() ' Converts titles to text shapes then changes titles to something short ' in order to help solve hyperlink problems due to over-long/too-many titles Dim oSlide As Slide Dim oSlides As Slides Dim oShapes As Shapes Dim oSh As Shape Dim oHyperlinks As Hyperlinks Dim oHl As Hyperlink Dim tmpText1 As String Dim tmpText2 As String Set oSlides = ActivePresentation.Slides For Each oSlide In oSlides ' Deal with the titles: Set oShapes = oSlide.Shapes For Each oSh In oShapes If oSh.Type = msoPlaceholder Then If oSh.HasTextFrame Then If oSh.TextFrame.HasText Then If oSh.PlaceholderFormat.Type = ppPlaceholderCenterTitle Or _ oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then ' make a copy of the title and move it to match title's position With oSh.Duplicate .Top = oSh.Top .Left = oSh.Left .Tags.Add "OriginalTitleText", oSh.TextFrame.TextRange.Text End With ' change the title text to something innocuous (and SHORT) ' or leave it as is, but remove the commas ' remove the ' from one or the other of the following lines ' to choose which: 'oSh.TextFrame.TextRange.Text = "S-" & CStr(oSlide.SlideIndex) oSh.TextFrame.TextRange.Text = _ Replace(oSh.TextFrame.TextRange.Text, ",", " ") ' and hide it oSh.Visible = msoFalse End If End If End If End If Next oSh ' fix up hyperlinks Set oHyperlinks = oSlide.Hyperlinks For Each oHl In oHyperlinks If oHl.Address = "" And oHl.SubAddress <> "" Then If InStr(oHl.SubAddress, ",") > 0 Then tmpText1 = oHl.SubAddress ' xx,yy,This is the old title ' get the text up to and including the first comma tmpText2 = Mid$(tmpText1, 1, InStr(tmpText1, ",")) ' xx, ' strip off the text we just grabbed tmpText1 = Right$(tmpText1, Len(tmpText1) - Len(tmpText2)) ' yy,This is the old title ' Get the text up to and including the first comma, append it tmpText2 = tmpText2 & Mid$(tmpText1, 1, InStr(tmpText1, ",")) ' append a null tmpText2 = tmpText2 & " " oHl.SubAddress = tmpText2 End If End If Next oHl Next oSlide Set oSlide = Nothing Set oSlides = Nothing End Sub
Sub GatherTitles() ' This is a modified version of the GatherTitles macro ' that collects the original title text stored in tags ' by our TitlesToText macro Dim oSlide As Slide Dim strTitles As String Dim strFilename As String Dim intFileNum As Integer Dim PathSep As String If ActivePresentation.Path = "" Then MsgBox "Please save the presentation then try again" Exit Sub End If #If Mac Then PathSep = ":" #Else PathSep = "\" #End If For Each oSlide In ActiveWindow.Presentation.Slides On Error Resume Next ' in case the title shape's gone missing strTitles = strTitles _ & "Slide: " _ & CStr(oSlide.SlideIndex) & vbCrLf _ & oSlide.Shapes("PseudoTitle").Tags("OriginalTitleText") _ & vbCrLf & vbCrLf Next oSlide intFileNum = FreeFile ' PC-Centricity Alert! ' This assumes that the file has a .PPT extension and strips it off to make the text file name. strFilename = ActivePresentation.Path _ & PathSep _ & Mid$(ActivePresentation.Name, 1, Len(ActivePresentation.Name) - 4) _ & "_Titles.TXT" Open strFilename For Output As intFileNum Print #intFileNum, strTitles Close intFileNum Call Shell("Notepad " & strFilename, vbNormalFocus) End Sub