VBA Tipp: Datei mit zugeordnetem Programm öffnen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte eine Datei mit dem ihr in Windows zugeordneten Programm öffnen. Falls kein entsprechendes Programm für den Dateityp installiert ist, soll ein Windows-Dialog zur Auswahl eines passenden Programms angezeigt werden.

Lösung

Das geht mit der folgenden API-Funktion und VBA-Funktion, die in einem allgemeinen (globalen) Modul gespeichert werden.

Details zu der ShellExecute-Funktion siehe Anwendung mit ShellExecute starten.

Option Explicit
 
Private 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 DateiOeffnen(Dateipfad As String) As Boolean
 
 ' Quelle: http://www.dbwiki.net/
 
 Dim strVerzeichnis        As String
 Dim lngret                As Long
 Dim lngHwnd               As Long
 
 Const cNichtGefunden      As Long = 2  ' ERROR_FILE_NOT_FOUND
 Const cZugriffVerweigert  As Long = 5  ' SE_ERR_ACCESSDENIED
 Const cKeineZuordnung     As Long = 31 ' SE_ERR_NOASSOC
 
 lngHwnd = Application.hWndAccessApp
 
 ' Versuchen, die Datei zu öffnen
 lngret = ShellExecute(lngHwnd, vbNullString, Dateipfad, _
                       vbNullString, _
                       vbNullString, vbMaximizedFocus)
 
 ' Rückgabewert auswerten
 Select Case lngret
 
   ' Wenn der Dateipfad ungültig ist
   Case cNichtGefunden
 
     MsgBox "Der Dateipfad '" & Dateipfad & "' ist ungültig."
 
   ' Wenn der Benutzer das Öffnen der Datei
   ' über die Benutzerkontensteuerung abgebrochen hat
   Case cZugriffVerweigert
 
     ' MsgBox "Das Öffnen der Datei wurde abgebrochen."
 
   ' Wenn der Dateityp keinem Programm zugeordnet werden kann
   Case cKeineZuordnung
 
     strVerzeichnis = Environ("windir") & "\system32"
 
     ' Dialog anzeigen
     Call ShellExecute(lngHwnd, vbNullString, "rundll32.exe", _
                       "shell32.dll,OpenAs_RunDLL " & Dateipfad, _
                       strVerzeichnis, vbNormalFocus)
 
   ' Wenn die Datei erfolgreich geöffnet wurde
   Case Is > 32
 
     DateiOeffnen = True
 
 End Select
 
End Function

Aufruf

 Dim strPfad As String
 
 ' Beispiel 1: Datei mit "bekanntem" Dateityp
 strPfad = SysCmd(acSysCmdAccessDir) & "WINWORD.EXE"
 
 ' Beispiel 2: Datei mit "unbekanntem" Dateityp
 strPfad = SysCmd(acSysCmdAccessDir) & "GERMAN.LNG"
 
 ' Versuchen, die Datei zu öffnen
 Call DateiOeffnen(strPfad)

Wikilinks

Weblinks