Soll eine Prozedur eine Datei verarbeiten, benötigt sie deren Pfad. Den Pfad von Hand einzutippen ist umständlich und führt leicht zu Tippfehlern. Komfortabler ist der Dialog, den wir aus anderen Anwendungen kennen: Der Benutzer wählt die Datei aus, und die Prozedur erhält den Pfad. Dafür stellt die Eigenschaft FileDialog des Objekts Application den Dialog bereit. Wie Du den Dialog zur Auswahl von Dateien per VBA-Prozedur anzeigst, anpasst und auswertest, liest Du in diesem Artikel.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank VBABasics_DateienAuswaehlenPerDialog.accdb. Sie enthält das Modul mdlDateiDialogBeispiele mit den Prozeduren dieses Artikels und das Formular frmDateiauswahl. Im Ordner Dateien neben der Datenbank liegen die Dateien Rueckseite.png und Leseprobe.pdf, mit denen wir den Dialog ausprobieren.
Den Verweis auf die Office-Bibliothek setzen
Der Typ FileDialog gehört nicht zu Access selbst, sondern zur Office-Bibliothek, die Access gemeinsam mit den anderen Office-Anwendungen nutzt. Damit der VBA-Editor den Typ FileDialog und die Konstanten wie msoFileDialogFilePicker kennt, muss das VBA-Projekt einen Verweis auf diese Bibliothek enthalten. In der Beispieldatenbank ist der Verweis gesetzt.
Fehlt der Verweis, meldet der VBA-Editor beim Kompilieren den Fehler „Benutzerdefinierter Typ nicht definiert“. Dann öffnen wir im VBA-Editor mit dem Menübefehl Extras|Verweise den Dialog Verweise und aktivieren den Eintrag Microsoft Office 16.0 Object Library (siehe Bild 1).
Bild 1: Formular-Entwurf unseres Beispielformulars
Wie wir mit Verweisen arbeiten, zeigt der Artikel VBA [basics]: Mit Verweisen arbeiten (www.access-basics.de/686).
Den Dialog anzeigen
Die Funktion EinfacheDateiauswahl zeigt den Dialog mit den Standardeinstellungen an und liefert den gewählten Pfad zurück:
Public Function EinfacheDateiauswahl() As String Dim fd As FileDialog Set fd = _ Application.FileDialog(msoFileDialogFilePicker) If fd.Show Then EinfacheDateiauswahl = fd.SelectedItems(1) End If Set fd = Nothing End Function
Die Variable fd hat den Typ FileDialog. Die Eigenschaft FileDialog des Objekts Application liefert den Dialog. Das Argument der Eigenschaft legt die Art des Dialogs fest. Es gibt vier Konstanten:
- msoFileDialogOpen: hat den Wert 1 und zeigt den Dialog Datei öffnen mit der Schaltfläche Öffnen.
- msoFileDialogSaveAs: hat den Wert 2 und zeigt den Dialog Datei speichern mit der Schaltfläche Speichern.
- msoFileDialogFilePicker: hat den Wert 3 und zeigt einen Dialog zur Auswahl von Dateien mit dem Titel Durchsuchen und der Schaltfläche OK.
- msoFileDialogFolderPicker: hat den Wert 4 und zeigt einen Dialog zur Auswahl eines Ordners mit dem Titel Durchsuchen und der Schaltfläche OK.
In diesem Artikel verwenden wir msoFileDialogFilePicker.
Die Methode Show zeigt den Dialog an und wartet, bis der Benutzer ihn schließt. Sie liefert True, wenn der Benutzer die Auswahl bestätigt hat, und False, wenn er den Dialog abgebrochen hat. Nach einer Bestätigung enthält die Auflistung SelectedItems die Pfade der gewählten Dateien. SelectedItems(1) liefert den ersten Pfad. Nach einem Abbruch liefert die Funktion eine leere Zeichenkette.
Im Direktbereich rufen wir die Funktion auf und wählen im Dialog eine Datei aus:
Debug.Print EinfacheDateiauswahl()
Der Dialog erscheint (siehe Bild 2). Nach dem Bestätigen gibt Debug.Print den Pfad aus, den die Funktion liefert, zum Beispiel den Pfad der Datei Rueckseite.png im Ordner Dateien.
Unser exklusives Angebot für Dich!
(Das Abo ist jederzeit monatlich kündbar)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)
