How to open a file from VBA
2004-05-13 File access 0 609
If the file type you want to open is supported by your default web browser, you can open the file like this:
Sub BrowsePDFDocument() ' opens a PDF document in the default web browser
Dim strDocument As String
strDocument = "PDF Files,*.pdf,All Files,*.*" ' file type options
' get pdf document name
strDocument = Application.GetOpenFilename(strDocument, 1, "Open File", , False)
If Len(strDocument) < 6 Then Exit Sub
ActiveWorkbook.FollowHyperlink strDocument
End Sub
Files can also be opened using the Shell-command like this:Shell "notepad.exe C:\Foldername\Filename.txt", vbMaximizedFocus ' open a txt documentYou will have to know the name of the executable/application that can open your file. If the executable is not included in your computers command path you will have to use the full file name like this:
Shell "C:\Foldername\Notepad.exe C:\Foldername\Filename.txt", vbMaximizedFocus ' open a txt documentOften the name of the executable can be different depending on the installed version of the software. The procedures below can help you find the proper executable file name and then open a document in its associated application:
Declare Function GetTempFileName Lib "kernel32" _
Alias "GetTempFileNameA" (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
Declare Function FindExecutable Lib "shell32.dll" _
Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, ByVal lpResult As String) As Long
Function GetExecutablePath(strFileType As String) As String
' returns the full path to the executable associated with the given file type
Dim strFileName As String, f As Integer, strExecutable As String, r As Long
If Len(strFileType) = 0 Then Exit Function ' no file type
strFileName = String$(255, " ")
strExecutable = String$(255, " ")
' get a temporary file name
GetTempFileName CurDir, vbNullString, 0&, strFileName
strFileName = Trim(strFileName)
' add the given file type
strFileName = Left$(strFileName, Len(strFileName) - 3) & strFileType
f = FreeFile
Open strFileName For Output As #f ' create the temporary file
Close #f
' look for an associated executable
r = FindExecutable(strFileName, vbNullString, strExecutable)
Kill strFileName ' remove the temporary file
If r > 32 Then ' associated executable found
strExecutable = Left$(strExecutable, InStr(strExecutable, Chr(0)) - 1)
Else ' no associated executable found
strExecutable = vbNullString
End If
GetExecutablePath = strExecutable
End Function
Sub OpenPDFDocument()
Dim strDocument As String, strExecutable As String
strDocument = "PDF Files,*.pdf,All Files,*.*" ' file type options
' get pdf document name
strDocument = Application.GetOpenFilename(strDocument, 1, "Open File", , False)
If Len(strDocument) < 6 Then Exit Sub
strExecutable = GetExecutablePath("pdf") ' get the path to Acrobat Reader
If Len(strExecutable) > 0 Then
' open pdf document
Shell strExecutable & " " & strDocument, vbMaximizedFocus
End If
End Sub