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
 
 If Len(Dateipfad) Then
 
   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 If
 
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