Use ShellExecute to sidestep certain linking problems
Problem
Some programs don't cooperate with PPT when you link to their files. The first release of Adobe Reader 7 is one example. When you set an Other File action setting in PowerPoint to open a PDF and click the link in slide show view, either nothing happens or you see a brief blink of Reader, which then disappears. And then nothing happens. (Note: this problem has been fixed in the 7.0.1 update to Reader).
Either way, you don't see the PDF you were expecting to view.
If you plan to run your presentation in PowerPoint, try the following VBA macro as a possible solution.
This won't work in the free PowerPoint viewers, and it won't work if your Macro security settings are on High.
To use it:
- Assign a shape an Other File action setting and choose the file.
- With the shape selected, run the AssignTag macro below. That will tag the shape with the name of the file to be launched, then assign the shape's action setting to be Run Macro: ShellExShape
Now put the file in SlideShow view and click the shape to see if it launches the document.
If it works, send a virtualkiss, money, whatever to Charles Wannall, whose post on the Adobe newsgroup suggested this workaround.
Solution
Option Explicit
Const SW_SHOWNORMAL As Long = 1
Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal Hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Public Sub AssignTag()
' Select a shape and run me:
With ActiveWindow.Selection.ShapeRange(1)
If .ActionSettings(ppMouseClick).Hyperlink.Address <> "" Then
Call .Tags.Add("FILENAME", .ActionSettings(ppMouseClick).Hyperlink.Address)
.ActionSettings(ppMouseClick).Run = "ShellExShape"
End If
End With
End Sub
Public Sub ShellExShape(oSh As Shape)
' Assign this macro as the shape's action setting
Dim sFileName As String
On Error GoTo ErrorHandler
' Get the name of the file assigned to the shape as a tag
sFileName = oSh.Tags("FILENAME")
' ShellExecute the file if one's listed
If Len(sFileName) > 0 Then
Call ShellExecute(0, "Open", sFileName, "", "C:\", SW_SHOWNORMAL)
End If
NormalExit:
Exit Sub
ErrorHandler:
Resume NormalExit
End Sub
See How do I use VBA code in PowerPoint? to learn how to use this example code.
Search terms: