Dateidialoge mit dem FileDialog-Objekt

André Minhorst, Duisburg

Dateidialoge unter Access – das war lange Zeit ein Mysterium, denn entweder musste man dazu das CommonDialog-ActiveX-Control von Microsoft verwenden oder direkt auf die Windows-API zugreifen. Wenn da nicht pfiffige Entwickler fertige Lösungen zur freien Verwendung angeboten hätten, würde man in manchen Datenbankanwendungen vermutlich heute noch Dateien und Verzeichnisse manuell eintragen. Mit der Version 2002 enthält Access ein FileDialog-Objekt, mit dem sich die gewünschten Dialoge recht komfortabel anzeigen lassen.

Für die Anzeige von Dateidialogen bietet Access bis zur Version 2000 zwei Möglichkeiten. Die erste verwendet das CommonDialog-Steuerelement und die zweite greift direkt auf die Windows-API zu.

Das Problem beim CommonDialog-Steuerelement ist das gleiche wie bei allen anderen Lösungen, die ein nicht in Access integriertes Steuerelement verwenden: Sie müssen sicherstellen, dass es auf jedem Rechner, auf dem die Datenbankanwendung verwendet wird, ebenfalls vorhanden ist.

Die zweite Variante verwendet einige API-Funktionen und ist zumindest insofern problemloser, als dass Sie den entsprechenden Code als Bestandteil der Datenbank – etwa als eigenes Klassenmodul – weitergeben können.

Bild 1: Individueller Dateidialog

Mit Access 2002 versucht Microsoft, eine in Access integrierte Lösung zu schaffen: Das FileDialog-Objekt ist ein Teil der Office-Bibliothek und steht damit sofort nach Erstellen einer neuen Datenbank und Einrichten eines entsprechenden Verweises auf die Bibliothek Microsoft Office x.0 Object Library zur Verfügung.

Das FileDialog-Objekt stellt Dialoge zum Auswählen von Verzeichnissen und Dateien bereit. Mit den zahlreichen Einstellungsmöglichkeiten lässt sich der resultierende Dialog relativ weit an eigene Bedürfnisse anpassen (siehe Bild 1).

Nachteile besitzt das Filedialog-Objekt allerdings auch – zumindest einen: Die Entwickler haben wohl an der falschen Stelle gespart, als sie einen Dialog zur Auswahl eines Speichernamens für eine Datei ausließen.

Scheinbar dachte man, dass ja im Vergleich zu Word oder Excel in Access eigentlich keine Dateien gespeichert werden. Damit lassen sich mit diesem Dialog keine klassischen “Speichern unter…”-Dialoge erzeugen.

Und auch der Dialog zum öffnen einer Datei mit der dem Dateityp entsprechenden Anwendung ist für den Einsatz in Access nicht geeignet.

Das FileDialog-Objekt stellt vier unterschiedliche Dialoge zur Verfügung, von denen unter Access aber – wie bereits erwähnt – nur zwei funktionieren.

Der Dateiauswahl-Dialog dient der Auswahl von Dateien, deren Namen Sie später weiterverarbeiten können. Mit ihm lassen sich mehrere Dateinamen gleichzeitig auswählen, die Sie später aus einer Auflistung auslesen können.

Der zweite Dialog dient zum Auswählen eines Verzeichnisses. Er gibt den kompletten Pfad eines einzelnen Verzeichnisses zurück.

FileDialog-Objekt vorbereiten

Um das FileDialog-Objekt unter VBA verfügbar zu machen, müssen Sie zunächst einen Verweis auf die Office-Bibliothek anlegen.

Dazu wechseln Sie per Strg + g zum VBA-Editor, wählen den Menüpunkt Extras/Verweise aus und setzen dort einen Haken vor den Eintrag Microsoft Office 11.0 Object Library (siehe Bild 2).

Methoden und Eigenschaften des FileDialog-Objekts

Anschließend können Sie per VBA auf die Methoden und Eigenschaften des FileDialog-Objekts zugreifen. Mit dem Objektkatalog (am schnellsten anzuzeigen per F2) können Sie sich erstmal einen überblick über die Elemente dieses Objekts verschaffen – geben Sie einfach FileDialog im Suchfenster ein und klicken Sie dann auf den entsprechenden Eintrag in der Liste der Suchergebnisse (siehe Bild 3).

Bild 2: Verweis auf die Office-Bibliothek erstellen

Bild 3: Methoden und Eigenschaften des FileDialog-Objekts

In den folgenden Kapiteln lernen Sie die einzelnen Methoden und Eigenschaften und ihre Einsatzmöglichkeiten genauer kennen.

Die einfachste Variante des Datei auswählen-Dialogs ist die aus Quellcode 1. Die Funktion deklariert eine Objektvariable, die sie anschließend mit dem FileDialog-Objekt füllt.

Public Function DateiAuswaehlen()
    Dim objFiledialog As FileDialog
    Set objFiledialog = _        Application.FileDialog(msoFileDialogOpen)
    With objFiledialog
        .AllowMultiSelect = False
        If .Show = True Then
            DateiAuswaehlen = .SelectedItems(1)
        End If
    End With
    Set objFiledialog = Nothing
End Function

Quellcode 1

Public Function VerzeichnisAuswaehlen()
    Dim objFiledialog As FileDialog
    Set objFiledialog = _       Application.FileDialog(msoFileDialogFolderPicker)
    With objFiledialog
        .AllowMultiSelect = False
        If .Show = True Then
            VerzeichnisAuswaehlen = .SelectedItems(1)
        End If
    End With
    Set objFiledialog = Nothing
End Function

Quellcode 2

Bild 4: Der Standard-Dialog zum Auswählen von Dateien

Durch die Einstellung der Eigenschaft AllowMultiSelect auf den Wert False können Sie mit dem nachfolgend geöffneten Dialog nur eine Datei gleichzeitig auswählen.

Die Show-Methode zeigt den gewünschten Dialog an und gibt den Wert True zurück, wenn der Benutzer eine Datei ausgewählt hat. In dem Fall weist die Funktion ihrem Rückgabewert den Namen der ausgewählten Datei zu.

Der mit dieser Funktion angezeigte Dialog sieht wie in Bild 4 aus. Mit dem Kombinationsfeld Dateityp können Sie die angezeigten Dateien entsprechend ihrer Dateiendung einschränken. Als Kriterien zur Einschränkung stehen die normalerweise für den Import von Dateien unter Access angebotenen Dateitypen zur Verfügung.

Für die Auswahl eines einzelnen Verzeichnisses verwenden Sie prinzipiell die gleiche Funktion wie zur Auswahl einer Datei. Der einzige Unterschied ist der Parameter beim Instanzieren des FileDialog-Objekts (s. Quellcode 2). Der Dialog ist genau wie der zum Auswäh-len einer Datei aufgebaut (siehe Bild 5).

Die beiden Dialoge zur Auswahl von Dateien und Verzeichnissen lassen sich gut an spezielle Wünsche anpassen.

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