Dateien und Verzeichnisse auswählen mit FileDialog

Bereits seit einiger Zeit bietet die Office-Bibliothek das FileDialog-Objekt an. In früheren Versionen gab es dort einige Einschränkungen, weshalb Programmierer gern auf Alternativen zurückgegriffen haben wie etwa die entsprechenden Funktionen der Windows-API oder auch die der nicht dokumentierten WizHook-Klasse. Irgendwann hat Microsoft jedoch auch für Access alle Funktionen der FileDialog-Klasse freigeschaltet, unter anderem auch das Auswählen von zu speichernden Dateien. Daher schauen wir uns in diesem Beitrag einmal an, welche Möglichkeiten die FileDialog-Klasse nun bietet und ob wir diese für unsere Zwecke nutzen können.

Video passend zu diesem Artikel:

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

Die FileDialog-Klasse verfügbar machen

Um auf die FileDialog-Klasse und ihre Methoden und Eigenschaften zugreifen zu können, benötigen Sie entweder einen Verweis auf die Bibliothek Microsoft Office x.0 Object Library oder Sie referenzieren diese per Late Binding. Da wir die Vorzüge von IntelliSense zu schätzen wissen, nutzen wir hier die Bibliothek, die Sie im VBA-Editor einbinden können. Dazu wählen Sie den Menüeintrag Extras|Verweise aus und selektieren im nun erscheinenden Dialog den entsprechenden Eintrag (siehe Bild 1).

Verweis auf die Office-Bibliothek

Bild 1: Verweis auf die Office-Bibliothek

Einen FileDialog anzeigen

Grundsätzlich zeigen Sie einen FileDialog wie folgt an:

Dim objFiledialog As Office.FileDialog
Set objFiledialog = FileDialog(msoFileDialogFilePicker)
objFiledialog.Show

Sie benötigen also eine Objektvariable, die den Typ Office.FileDialog aufweist und füllen diese mit einem Verweis auf die FileDialog-Klasse unter Angabe des Typs, den Sie wünschen – in diesem Fall msoFileDialogPicker.

Dann zeigen Sie den Dialog mit der Methode Show an. Das Ergebnis dieses einfachen Aufrufs finden Sie in Bild 2.

Ein einfacher FileDialog

Bild 2: Ein einfacher FileDialog

Auswahl im FileDialog auswerten

Nun können Sie nach der Auswahl wie im oben angegebenen Beispiel mit dem Ergebnis noch nichts anfangen. Das erledigen wir, indem wir das Ergebnis des Aufrufs prüfen und dann die selektierten Daten auswerten.

Die ersten beiden Zeilen bleiben gleich:

Dim objFiledialog As Office.FileDialog
Set objFiledialog = FileDialog(msoFileDialogFilePicker)

Danach rufen wir die Show-Methode jedoch als Teil einer If…Then-Bedingung auf und prüfen in dieser das Ergebnis.

Dieses kann True oder False lauten. Es lautet True, wenn der Benutzer die Eingabe mit der Öffnen-Schaltfläche abgeschlossen hat und False, wenn er die Abbrechen-Schaltfläche wählt.

Im ersten Fall greifen wir mit objFileDialog.SelectedItems(1) auf den ersten ausgewählten Eintrag zu und geben diesen im Direktbereich des VBA-Editors aus, im zweiten zeigen wir den Text Keine Datei ausgewählt an:

If objFiledialog.Show = True Then
     Debug.Print objFiledialog.SelectedItems(1)
Else
     Debug.Print "Keine Datei ausgewählt"
End If

Verschiedene Dialogtypen

Sie können verschiedene Dialogtypen nutzen. Dazu geben Sie unterschiedliche Werte beim Zuweisen des FileDialog-Objekts an.

Diese lauten:

  • msoFileDialogFilePicker: Zeigt einen Dialog zum Auswählen einer oder mehrerer Dateien an.
  • msoFileDialogFolderPicker: Zeigt einen Dialog zum Auswählen eines Verzeichnisses an (siehe Bild 3).
  • Der FileDialog mit msoFileDialogFolderPicker zeigt nur Ordner an, keine Dateien.

    Bild 3: Der FileDialog mit msoFileDialogFolderPicker zeigt nur Ordner an, keine Dateien.

  • msoFileDialogOpen: Zeigt den gleichen Dialog an wie msoFileDialogFilePicker, jedoch mit dem Titel Öffnen. Ist für andere Office-Anwendungen wie Word oder Excel geeignet, wo die Dokumente so direkt geöffnet werden können.
  • msoFileDialogSaveAs: Zeigt einen Dialog zum Angeben einer zu speichernden Datei an. Es kann eine vorhandene Datei ausgewählt werden oder auch ein neuer Dateiname angegeben werden (siehe Bild 4). Die Schaltfläche zum Bestätigen der Eingabe ist hier mit Speichern beschriftet.
  • Der FileDialog mit msoFileDialogSaveAs erlaubt auch die Eingabe noch nicht vorhandener Dateinamen.

    Bild 4: Der FileDialog mit msoFileDialogSaveAs erlaubt auch die Eingabe noch nicht vorhandener Dateinamen.

Eigenschaften werden beibehalten

Wenn Sie die nachfolgend beschrieben Eigenschaften nutzen, werden die Einstellungen beim erneuten Öffnen eines FileDialog-Fensters aus der gleichen Access-Session heraus beibehalten, wenn Sie nicht explizit neue Werte für die Eigenschaften angeben.

Mehrfachauswahl erlauben

Mit der Eigenschaft AllowMultiSelect können Sie festlegen, ob der Benutzer nur einen Eintrag (False) oder mehrere Einträge auswählen kann (True).

Diese Eigenschaft stellen Sie nach dem Zuweisen der FileDialog-Klasse an die Variable objFileDialog ein:

objFiledialog.AllowMultiSelect = True

Wenn Sie so einen msoFileDialogFilePicker-Dialog öffnen, können Sie beispielsweise bei gedrückter Strg-Taste mehrere Dateien wie in Bild 5 auswählen.

Mehrfachauswahl mit dem FileDialog-Objekt

Bild 5: Mehrfachauswahl mit dem FileDialog-Objekt

Danach ist allerdings eine andere Auswertung erforderlich als bei der einfachen Auswahl, denn wir erhalten ja nicht nur einen, sondern gegebenenfalls auch mehrere Einträge zurück. Im Beispiel aus Listing 1 ermitteln wir zunächst die Anzahl der selektierten Dateien und geben diese im Direktbereich aus. Anschließend durchlaufen wir in einer Schleife alle Einträge der Auflistung SelectedItems und geben diese ebenfalls im Direktbereich aus.

Private Sub FileDialog_FilePicker_Mehrfach()
     Dim objFiledialog As Office.FileDialog
     Dim l As Long
     Set objFiledialog = FileDialog(msoFileDialogFilePicker)
     objFiledialog.AllowMultiSelect = True
     If objFiledialog.Show = True Then
         Debug.Print "Es wurden " & objFiledialog.SelectedItems.Count & " Dateien ausgewählt:"
         For l = 1 To objFiledialog.SelectedItems.Count
             Debug.Print objFiledialog.SelectedItems(l)
         Next l
     Else
         Debug.Print "Keine Datei ausgewählt"
     End If
End Sub

Listing 1: Ausgabe einer Mehrfachauswahl im Direktbereich

Beschriftung der Schaltfläche zum Auswählen ändern

Mit der Eigenschaft ButtonName können Sie die sichtbare Bezeichnung der Schaltfläche zum Auswählen der gewählten Dateien oder Verzeichnisse ändern. Das gelingt allerdings nicht bei allen FileDialog-Typen auf Anhieb, sondern bei manchen erst nach der Auswahl eines Eintrags. Bei den Dialogen der Typen msoFileDialogFolderPicker und msoFileDialogSaveAs erscheint der gewünschte Text sofort. Das sieht beispielsweise wie im folgenden Codeausschnitt aus:

Dim objFiledialog As Office.FileDialog
Set objFiledialog = FileDialog(msoFileDialogFolderPicker)
objFiledialog.ButtonName = "FolderPicker"
If objFiledialog.Show = True Then
     ...

Das Ergebnis sehen Sie in Bild 6.

Ändern der Beschriftung der linken Schaltfläche

Bild 6: Ändern der Beschriftung der linken Schaltfläche

Bei den anderen Einstellungen wird der gewünschte Text erst angezeigt, wenn der Benutzer mindestens eine Datei ausgewählt hat (siehe Bild 7).

Ändern der Beschriftung der linken Schaltfläche erst nach erfolgter Auswahl

Bild 7: Ändern der Beschriftung der linken Schaltfläche erst nach erfolgter Auswahl

Überschrift des Dialogs einstellen

Mit der Eigenschaft Title können Sie den Text in der Titelzeile festlegen:

objFiledialog.Title = "Datei auswählen"

Beim Öffnen anzuzeigenden Ordner einstellen

Wenn Sie direkt beim Öffnen des Dialogs einen bestimmten Ordner anzeigen wollen, übergeben Sie diesen für die Eigenschaft InitialFileName.

Den Ordnernamen müssen Sie immer mit einem Backslash (\) abschließen. Wenn Sie beispielsweise das Verzeichnis c: anzeigen wollen, geben Sie c:\ an:

objFiledialog.InitialFileName = "c:\"

Wollen Sie beispielsweise im Verzeichnis der aktuellen Datenbank starten, verwenden Sie die Funktion CurrentProject.Path und schließen dies mit dem Backslash-Zeichen ab:

objFiledialog.InitialFileName = CurrentProject.Path & "\"

Beim Öffnen auszuwählende Datei vorbelegen

Gegebenenfalls wissen Sie auch schon, wie die auszuwählende Datei heißen soll. Das ist beispielsweise bei Konfigurationsdateien oft der Fall oder auch bei der Auswahl von Backenddatenbanken.

Dann geben Sie für die Eigenschaft InitialFileName einfach den vollständigen Pfad zu der auszuwählenden Datei an – hier für eine Backenddatenbank:

objFiledialog.InitialFileName = CurrentProject.Path & "\Backend.accdb"

Ansicht beim Öffnen

Mit der Eigenschaft InitialView können Sie festlegen, welche Ansicht beim Öffnen des FileDialog-Objekts verwendet werden soll. Hier gibt es die folgenden Werte:

  • msoFileDialogViewDetails
  • msoFileDialogViewLargeIcons
  • msoFileDialogViewList
  • msoFileDialogViewPreview
  • msoFileDialogViewProperties
  • msoFileDialogViewSmallIcons
  • msoFileDialogViewThumbnail
  • msoFileDialogViewTiles
  • msoFileDialogViewWebView

Auf dem Testsystem mit Windows 10 und Office 365 hat diese Einstellung keine Auswirkung.

Filtern der angezeigten Dateien

Sie können festlegen, nach welchen Dateien beziehungsweise Dateiendungen das FileDialog-Fenster filtern soll. Dazu verwenden Sie die Eigenschaft FilterIndex, mit der Sie festlegen, welcher der aufgeführten Filter verwendet werden soll und die Auflistung Filters, der Sie eigene Filter hinzufügen können.

Die Auflistung Filters enthielt auf dem Testsystem den Filter für alle Dateien, also für *.*, und den Beschreibungstext Alle Dateien. Die Filters-Auflistung listet Elemente des Typs Filter auf, der wiederum verschiedene Eigenschaften liefert. Als Erstes können Sie beispielsweise im Direktbereich die Anzahl der definierten Filter ausgeben lassen:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar