Dateien per VBA öffnen

Es gibt viele Gelegenheiten, zu denen man gern eine Datei per VBA öffnen möchte. Ein gutes Beispiel ist ein soeben auf Basis eines Berichts erstelltes PDF-Dokument. Doch der Standardumfang von VBA liefert keine Möglichkeit, diese Aufgabe zu erledigen. Und tatsächlich ist das Anzeigen einer Datei nicht trivial, zumindest dann nicht, wenn wir vorher noch nicht wissen, welchen Dateityp die Datei hat und mit welcher Anwendung diese geöffnet werden soll. Allerdings weiß Windows ja auch meistens, mit welcher Anwendung eine Datei geöffnet werden soll, wenn wir diese im Windows Explorer doppelt anklicken. Also muss es einen Weg geben, diese Aufgabe per Code zu erledigen. Und die Lösung ist eine API-Funktion namens ShellExecute.

Beispieltabelle mit Dateiinformationen

Zu Beispielzwecken haben wir einer Datenbank eine Tabelle namens tblDateien hinzugefügt. Diese sieht wie in Bild 1 aus und enthält neben einer Bezeichnung den Namen von Dateien. Auf Pfadangaben haben wir der besseren Nutzbarkeit der Beispieldatenbank halber verzichtet und gehen davon aus, dass die angegebenen Dateien sich im gleichen Verzeichnis wie die Datenbank befinden. Auf diese Weise können wir in den folgenden Beispielen per Code unter Zuhilfenahme von CurrentProject.Path auf die Dateien zugreifen.

Tabelle mit Dateiangaben

Bild 1: Tabelle mit Dateiangaben

Formular zum Anzeigen der Beispieldateien

Um die Funktion zum Anzeigen der Dateien einfach aufrufen zu können, erstellen wir ein Formular, dass die Daten der Tabelle tblDateien anzeigt und eine Schaltfläche bereitstellt, mit der wir die Datei anzeigen können (siehe Bild 2). Diese Schaltfläche heißt cmdDateiOeffnen. Gleich fügen wir der der Schaltfläche den Code zum Öffnen der Datei aus dem Feld Dateiname hinzu.

Entwurf eines Formulars zur Anzeige von Dateien in der jeweiligen Anwendung

Bild 2: Entwurf eines Formulars zur Anzeige von Dateien in der jeweiligen Anwendung

API-Funktion zum Anzeigen von Dateien

Für das Anzeigen von Dateien benötigen wir die API-Funktion ShellExecuteA. Diese deklarieren wir wie in Listing 1 in zweifacher Ausführung, einmal für Access-Versionen, die ein älteres VBA verwenden und einmal für die aktuellen Fassungen. Die Deklaration platzieren wir oben in einem neuen Standardmodul namens mdlDateienAnzeigen. Der Unterschied besteht in der Verwendung des Schlüsselworts PtrSafe sowie dem Datentyp LongPtr für den Parameter hWnd bei der Version für aktuelles VBA.

#If VBA7 Then
     Public Declare PtrSafe Function ShellExecuteA Lib "Shell32" (ByVal hWnd As LongPtr, ByVal lpOperation As String, _
       ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nCmdShow As Long) As Long
#Else
     Public Declare Function ShellExecuteA Lib "Shell32" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal _
        lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nCmdShow As Long) As Long
#End If

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar