Show Me: The hyperlinks in my presentation
Problem
What hyperlinks are in this presentation? What slides are they on and what shapes or text are they associated with?
Solution
Run this code to find out:
Sub ShowMeTheHyperlinks() ' Lists the slide number, shape name and address ' of each hyperlink Dim oSl As Slide Dim oHl As Hyperlink For Each oSl In ActivePresentation.Slides For Each oHl In oSl.Hyperlinks If oHl.Type = msoHyperlinkShape Then MsgBox "HYPERLINK IN SHAPE" _ & vbCrLf _ & "Slide: " & vbTab & oSl.SlideIndex _ & vbCrLf _ & "Shape: " & oHl.Parent.Parent.Name _ & vbCrLf _ & "Address:" & vbTab & oHl.Address _ & vbCrLf _ & "SubAddress:" & vbTab & oHl.SubAddress Else ' it's text MsgBox "HYPERLINK IN TEXT" _ & vbCrLf _ & "Slide: " & vbTab & oSl.SlideIndex _ & vbCrLf _ & "Shape: " & oHl.Parent.Parent.Parent.Parent.Name _ & vbCrLf _ & "Address:" & vbTab & oHl.Address _ & vbCrLf _ & "SubAddress:" & vbTab & oHl.SubAddress End If Next ' hyperlink Next ' Slide End Sub
Or to get a list off all the hyperlinks in the presentation in a text file:
Option Explicit Sub FileEmDano() ' Lists the slide number, shape name and address ' of each hyperlink and saves the results to a file: Dim oSl As Slide Dim oHl As Hyperlink Dim sTemp As String Dim sFileName As String ' Output the results to this file: sFileName = Environ$("TEMP") & "\" & "HyperlinkList.TXT" For Each oSl In ActivePresentation.Slides For Each oHl In oSl.Hyperlinks If oHl.Type = msoHyperlinkShape Then sTemp = sTemp & "HYPERLINK IN SHAPE on Slide:" & vbTab & oSl.SlideIndex _ & vbCrLf _ & "Shape: " & oHl.Parent.Parent.Name _ & vbCrLf _ & "Address:" & vbTab & oHl.Address _ & vbCrLf _ & "SubAddress:" & vbTab & oHl.SubAddress & vbCrLf & vbCrLf Else ' it's text sTemp = sTemp & "HYPERLINK IN TEXT on Slide:" & vbTab & oSl.SlideIndex _ & vbCrLf _ & "Shape: " & oHl.Parent.Parent.Parent.Parent.Name _ & vbCrLf _ & "Address:" & vbTab & oHl.Address _ & vbCrLf _ & "SubAddress:" & vbTab & oHl.SubAddress & vbCrLf & vbCrLf End If Next ' hyperlink Next ' Slide Call WriteStringToFile(sFileName, sTemp) Call LaunchFileInNotePad(sFileName) End Sub Sub WriteStringToFile(pFileName As String, pString As String) ' Saves the contents of the string pSTring to the file pFileName Dim intFileNum As Integer intFileNum = FreeFile ' change Output to Append if you want to add to an existing file ' rather than creating a new file each time Open pFileName For Output As intFileNum Print #intFileNum, pString Close intFileNum End Sub Sub LaunchFileInNotePad(pFileName As String) Dim lngReturn As Long lngReturn = Shell("NOTEPAD.EXE " & pFileName, vbNormalFocus) End Sub
How do I use VBA code in PowerPoint?
http://www.pptfaq.com/FAQ00033.htm