View Single Post
  #10   Report Post  
Posted to microsoft.public.excel.programming
Jake Marx[_3_] Jake Marx[_3_] is offline
external usenet poster
 
Posts: 860
Default Can I run an external program?

Hi Dick,

Dick Kusleika wrote:
I'd like to be able have a routine that launches a PDF file. The
closest thing I can find it the ActivateMicrosoftApp Method which, of
course doesn't work with the Adobe product files.


Consider using the FollowHyperlink method. It will open the file
according to your Windows associations. See

http://www.dicks-blog.com/archives/2...nt-file-types/


Personally, I don't like using the FollowHyperlink method for anything but
URLs. On my machine (Win XP SP2), I get a warning telling me that links may
harm my computer.

Here's a way to do it with the API, which is cleaner and gives you more
options on how you want to display the document and what to do if it's not
found:

Public Const SW_SHOWMAXIMIZED = 3
Public Const ERROR_FILE_NOT_FOUND = 2&

Public 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 Function gbOpenDocument(rsFullPath As String, _
rsErrMsg As String) As Boolean
Dim lResponse As Long

lResponse = ShellExecute(Application.hwnd, _
"open" & vbNullChar, rsFullPath & vbNullChar, _
vbNull, vbNull, SW_SHOWMAXIMIZED)

If lResponse = ERROR_FILE_NOT_FOUND Then rsErrMsg _
= "File not found."
gbOpenDocument = (lResponse 32)
End Function

Sub test()
Dim sErr As String

Debug.Print gbOpenDocument("c:\test234.pdf", sErr)
If Len(sErr) Then Debug.Print sErr
End Sub

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]