Home > Artikel > Ausgabe 7/2011 > Dialog zur Auswahl von Dateien anzeigen

Dialog zur Auswahl von Dateien anzeigen

  PDF ansehen

  Download PDF und Beispieldatenbank

Auch wenn Access eigentlich alles an Bord hat, was man zum Bearbeiten von Daten benötigt, so muss man sich doch das eine oder andere hinzuprogrammieren. Dazu gehört eine Funktion, mit der Sie einen Dialog zum Auswählen von Dateien anzeigen können. Dieser Artikel zeigt die einfachste versionsübergreifende Lösung dieser Aufgabe.

Beispieldatenbank

Die Beispieldatenbank zu diesem Artikel heißt 1107_DateiOeffnenDialog.mdb. Sie finden diese im Download zu diesem Artikel.

Wozu Dateien auswählen?

Wenn Sie Anwendungen mit Access programmieren, werden Sie früher oder später eine Funktion zum Auswählen von Dateien anbieten müssen. Anlässe dazu gibt es genug:

  • Der Benutzer soll eine Datei auswählen, deren Daten importiert werden sollen (Excel-Tabellen, Textdateien, XML-Dokumente).
  • Sie möchten Bilder mit der Datenbank verwalten, ohne die Bilder in der Datenbank zu speichern. Dazu müssen Sie die Dateinamen samt Pfad in einer Tabelle speichern und diese dazu vorher auswählen.
  • Sie möchten dem Benutzer die Möglichkeit bieten, nach dem Verschieben des Backends einer Datenbank selbst nach dieser Datei zu suchen (siehe Aktion beim Start: Das Autoexec-Makro).

Verschiedene Möglichkeiten

Es gibt die verschiedene Varianten, um einen Datei öffnen-Dialog anzuzeigen. Früher verwendete man dazu das Common Dialogs-Steuerelement, neuere Access-Versionen bieten die FileDialog-Klasse für diesen Zweck an. Es gibt jedoch auch eine Variante, die in allen Access-Versionen arbeitet. Diese steckt in einer verborgenen und nicht dokumentierten Klasse, ist aber sehr leicht aufzurufen.

Datei öffnen-Dialog der Wizhook-Klasse

Um diese Klasse namens Wizhook zu aktivieren, platzieren Sie in einer neuen Prozedur die folgende Anweisung:

WizHook.Key = 51488399

Danach fügen Sie eine Anweisung ein, die den Befehl GetFileName dieser Klasse aufruft. Wie Bild 1 zeigt, liefert IntelliSense schnell eine Liste aller verfügbaren Parameter.

Parameter der Funktion GetFileName

Bild 1: Parameter der Funktion GetFileName

Die Parameter haben folgende Bedeutung:

  • hwndOwnder: Handle der Anwendung, von der aus der Dialog aufgerufen wird, hier Application.hWndAccessApp
  • AppName: Name der Anwendung, hier Microsoft Access
  • DlgTitle: Titel des Dateidialogs
  • OpenTitle: Beschriftung der Schaltfläche zum Übernehmen der Auswahl
  • File: Liefert die ausgewählte(n) Datei(en) als Zeichenkette
  • InitialDir: Verzeichnis, das beim Öffnen angezeigt wird
  • Filter: Liste der Dateifilter
  • FilterIndex: Nummer des Filters, der beim Öffnen angewendet wird
  • View: Dateiansicht
  • Flags: Zahlenwerte, die verschiedene weitere Optionen aktivieren
  • fOpen: Gibt an, ob der aktuell ausgewählte Ordner beim Klick auf die Öffnen-Schaltfläche geöffnet wird oder nicht

Einfache Dateiauswahl

Eigentlich könnte man diesen Befehl mit einer einzigen Zeile aufrufen, aber irgendwie müssen Sie ja die ausgewählte(n) Datei(en) auslesen, und diese landen im Parameter File. Also müssen Sie zumindest hierfür eine Variable deklarieren und als Parameter übergeben. Anschließend können Sie den Inhalt dieser Variablen auslesen. Schauen wir uns das für einen einfachen Fall an:

Public Function DateiAuswaehlen() As String

     Dim strFile As String

     WizHook.Key = 51488399

     Call WizHook.GetFileName( Application.hWndAccessApp, "Microsoft Access", "Datei öffnen", "Öffnen", strFile, CurrentProject.Path, "Access-Datenbanken (*.mdb,*.accdb)", µ

                                     0, 0, 0, False)

     Debug.Print strFile

End Function

Diese Routine legt zunächst die Variable strFile zum Speichern der ausgewählten Datei an. Dann aktiviert sie die Wizhook-Klasse durch Zuweisen der Key-Eigenschaft. Schließlich folgt der eigentliche Aufruf des Dateidialogs, der den Dialog aus Bild 2 hervorruft.

Beispiel für einen Dateidialog

Bild 2: Beispiel für einen Dateidialog

Die ersten beiden Parameter können Sie immer wie hier angegeben verwenden. Der dritte gibt den anzuzeigenden Titel des Dialogs an, der vierte die Bezeichnung der Schaltfläche zum Abschließen der Auswahl.

Der fünfte Parameter erwartet eine Variable, die beim Beenden der Auswahl mit Pfad und Dateiname der selektierten Datei gefüllt wird und nachher ausgewertet werden kann. Der sechste Parameter übergibt das Verzeichnis, in dem die Auswahl beginnen soll – hier das mit CurrentProject.Path ermittelte Verzeichnis der aktuellen Datenbankdatei.

Danach folgt die Angabe der Filter, wobei wir hier nur das Anzeigen von Access-Datenbankdateien erlauben. Die folgende 0 gibt an, dass der erste Eintrag der Filterliste beim Öffnen des Dialogs markiert sein soll. Die folgenden beiden Parameter, die ebenfalls mit 0 gefüllt wurden, betrachten wir später. Der letzte Parameter ist für die reine Dateiauswahl irrelevant.

Einfache Ordnerauswahl

Auch wenn die Funktion GetFileName heißt, können Sie damit dennoch auch Ordner auswählen. Dazu ändern Sie die folgenden Parameter:

  • DlgTitle: Wird auf Ordner auswählen eingestellt.
  • OpenTitle: Wird auf Auswählen eingestellt.
  • Flags: Wird auf 32 eingestellt.
  • fOpen: Wird auf True eingestellt.
  • Filter: Kann eine leere Zeichenfolge enthalten, da der Parameter nicht berücksichtigt wird.

Der Aufruf sieht dann beispielsweise wie folgt aus:

Call WizHook.GetFileName(Application.hWndAccessApp, "Microsoft Access", "Ordner auswählen", "Auswählen", strFolder, CurrentProject.Path, "", 0, 0, 32, True)

Der Dialog erscheint schließlich wie in Bild 3.

Beispiel für einen Verzeichnis-Auswahl-Dialog

Bild 3: Beispiel für einen Verzeichnis-Auswahl-Dialog

Filter einstellen

Gegebenenfalls möchten Sie den Filter etwas flexibler einstellen, damit der Benutzer die Menge der angezeigten Daten einschränken kann. Im Falle von Access-Datenbanken könnte diese Einstellung etwa so aussehen:

"Access-Dateien (*.mdb;*.accdb)|Kompilierte Dateien (*.mde;*.accde)|Add-Ins (*.mda;*.accda)|Alle Dateien (*.*)"

Sie werden das Schema schnell erkennen: Als erstes geben Sie den Text an, der den zu filternden Dateityp beschreibt. Dann folgt eine Klammer, die einen oder mehrere Einträge im Format *.xxx enthält, wobei xxx der Dateiendung entspricht. Soll ein Filter mehrere Dateiendungen behandeln, trennen Sie diese einfach durch das Semikolon-Zeichen (;) voneinander.

Wenn dann noch mehr als ein Filter in der Liste erscheinen soll, nehmen Sie einfach mehrere dieser Einträge vor und trennen diese durch das Pipe-Zeichen (|) voneinander. Das Ergebnis des oben angegebenen Filters zur Auswahl verschiedener Access-Dateitypen sehen Sie in Bild 4.

Filtern nach verschiedenen Access-Dateitypen

Bild 4: Filtern nach verschiedenen Access-Dateitypen

Filter ändern

Gerade wenn Sie den Dateidialog zur Auswahl von Bilddateien verwenden möchten, macht es Sinn, gleich nur Bilddateien anzuzeigen. Dazu stellen Sie den Filter entsprechend ein, beispielsweise so:

"Bilddateien (*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.tif)|Alle Dateien (*.*)"

Sinnvoll wäre es auch noch, gleich die Ansicht auf eine der Vorschauansichten einzustellen – dies gelingt jedoch leider nicht zuverlässt und nur unter bestimmten Systemkonfigurationen. Daher gehen wir an dieser Stelle nicht mehr darauf ein.