Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie eine Klasse kennen, mit der Sie alle Aufgaben rund um das Auswählen und Öffnen von Dateien erledigen können.

Techniken

VBA, Klassen, Dateizugriff

Voraussetzungen

Access 2000 und höher

Beispieldateien

Files.mdb

Shortlink

www.access-im-unternehmen.de/756

Dateidialog-Klasse

André Minhorst, Duisburg

In letzter Zeit programmiere ich gern Standardlösungen, die ich dann ohne großen Programmieraufwand in weitere Anwendungen übernehmen kann. In diesem Fall ging es um ein Textfeld zur Eingabe eines Dateinamens beziehungsweise um eine Schaltfläche zum Öffnen eines Datei öffnen-Dialogs. Die Kombination brauche ich immer wieder, sei es, um eine Datei für den Import von Daten auszuwählen oder den Pfad zum Backend der aktuellen Datenbank zu aktualisieren. Dieser Beitrag zeigt, wie Sie alles in eine Klasse packen und Ihre Formulare blitzschnell damit ausstatten.

Spätestens, wenn Sie eine Frontend-Backend-Lösung auf Basis von Access erstellen, wobei das Backend zumindest theoretisch seinen Speicherplatz wechseln kann, müssen Sie dem Anwender des Frontends die Möglichkeit bieten, manuell das Backend auszuwählen.

Die gleiche Situation tritt immer dann ein, wenn Ihre Anwendung Daten aus beliebigen anderen Dateien wie etwa Excel-, XML-, Text- oder Worddokumenten importieren soll. Auch dann wird normalerweise der Benutzer aufgefordert, die gewünschte Datei auszuwählen.

Dabei gibt es unterschiedliche Ausprägungen: Mal soll der Benutzer nur einen Dialog zum Auswählen der Datei öffnen können, woraufhin der die Datei betreffende Vorgang direkt beginnt, mal soll die ausgewählte Datei in einem Textfeld angezeigt werden, bevor der Benutzer die entsprechende Aktion mit einer zweiten Schaltfläche startet.

Traurige Tatsache ist, dass man den betroffenen Code jeweils von einer Datenbankdatei zur nächsten kopiert und teilweise der gleiche Code gleich mehrfach in einer einzigen Datei auftaucht - und dies auch noch in unterschiedlichen Ausprägungen.

Dateiauswahl mit Klasse

Die in diesem Beitrag vorgestellte Lösung soll die komplette Funktionalität in einer einzigen Klasse liefern. Diese wird im betroffenen Formular deklariert und instanziert und stellt dann nicht nur die üblichen Funktionen zum Auswählen von Datei, Speicherort und Verzeichnis bereit, sondern bestückt auch Schaltflächen mit den entsprechenden Funktionen.

Einfache Dateiauswahl-Schaltfläche

Im Detail bedeutet dies, dass Sie sich noch nicht einmal mehr um die Ereignisprozedur kümmern müssen, die etwa eine Schaltfläche zum Auswählen einer Datei für die Dateiauswahl auslösen müsste.

Nehmen wir an, Sie wollen ein Formular mit einem Textfeld namens txtVerzeichnisUndDateiname und einer Schaltfläche namens cmdAuswaehlen bestücken. Die Schaltfläche soll einen Datei öffnen-Dialog anzeigen und im Anschluss die ausgewählte Datei in das Textfeld schreiben.

Das Formular sieht dann im Entwurf etwa so wie in Abb. 1 aus. Das Anlegen, Benennen und Ausrichten der Steuerelemente war auch schon fast der größte Teil der Arbeit - Sie müssen nun nur noch die Klasse clsFiles aus der Beispieldatenbank in die betroffene Datenbank importieren und ein paar Zeilen Code in das Beim Öffnen-Ereignis des Formulars schreiben.

pic001.png

Abb. 1: Beispiel für die Auswahl einer Datei per Textfeld und Schaltfläche

Im Kopf des Klassenmoduls des Formulars landet die Objektvariable, welche einen Verweis auf die noch zu erzeugende Instanz der Klasse clsFiles speichert:

Dim objFiles As clsFiles

In der Ereignisprozedur Form_Open wird dann zunächst die Instanz der Klasse clsFiles erzeugt und der Variablen objFiles zugewiesen.

Die beiden folgenden Anweisungen füllen zwei Eigenschaften des Objekts objFiles mit Verweisen auf die Schaltfläche, die den Datei auswählen-Dialog aktivieren soll, sowie auf das Textfeld, in dem der Pfad und der Dateiname der ausgewählten Datei landen sollen.

Private Sub Form_Open(Cancel As Integer)

    Set objFiles = New clsFiles

    With objFiles

        Set .Commandbutton_ChooseDocument = _

            Me!cmdAuswaehlen

        Set .Textbox_FolderAndFile = Me!txtVerzeichnisUndDateiname

    End With

End Sub

Danach können Sie bereits in die Formularansicht wechseln und auf die Schaltfläche Datei auswählen klicken. Es erscheint ein Datei auswählen-Dialog wie in Abb. 2. Die damit ausgewählte Datei landet samt Pfad im Textfeld txtVerzeichnisUndDateiname.

pic002.png

Abb. 2: Der Datei auswählen-Dialog

Und es kommt noch besser: Fügen Sie eine weitere Schaltfläche namens cmdOeffnen hinzu und betiteln Sie diese mit Öffnen. Erweitern Sie die Prozedur von oben um die folgende Zeile:

Set .CommandButton_OpenDocument = Me!cmdOeffnen

Wenn Sie nun das Formular öffnen, finden Sie weitere Funktionalität vor: Solange kein gültiger Dateiname im Textfeld steht, bleibt die Öffnen-Schaltfläche deaktiviert.

Erst, wenn Sie mit dem Datei auswählen-Dialog eine Datei ausgewählt haben, wird die Öffnen-Schaltfläche aktiviert. Ändern Sie jedoch auch nur einen Buchstaben des Dateinamens, sodass diese nicht mehr im Dateisystem gefunden werden kann, wird die Öffnen-Schaltfläche wieder deaktiviert.

Ein Klick auf die Öffnen-Schaltfläche startet schließlich die Standardanwendung für die ausgewählte Datei und öffnet diese.

Ordner und Verzeichnis getrennt

Das funktioniert auch, wenn Sie Ordner und Verzeichnis in zwei Textfeldern anzeigen. Das Beispielformular für diesen Fall sieht im Entwurf wie in Abb. 3 aus.

pic003.png

Abb. 3: Beispielformular mit separaten Textfeldern für Pfad und Dateiname

Im Beispielcode haben wir zur besseren Unterscheidbarkeit den Objektnamen objFiles2 gewählt (auch deshalb, weil Sie in der Beispieldatenbank mehrere Beispiele in einem Formular finden).

Wir deklarieren wieder die Objektvariable für clsFiles:

Dim objFiles2 As clsFiles

In der Beim Öffnen-Prozedur sieht der Code nur unwesentlich anders aus. Der einzige Unterschied ist, dass wir nun Verweise auf zwei Textfelder an die beiden Eigenschaften Textbox_File und Textbox_Folder des Objekts objFiles2 übergeben:

Private Sub Form_Open(Cancel As Integer)

    Set objFiles2 = New clsFiles

    With objFiles2

        Set .CommandButton_OpenDocument = _

            Me!cmdOeffnen2

        Set .Commandbutton_ChooseDocument = _

            Me!cmdAuswaehlen2

        Set .Textbox_File = Me!txtDateiname

        Set .Textbox_Folder = Me!txtVerzeichnis

    End With

End Sub

Der Klick auf die Schaltfläche Auswählen öffnet wiederum den Datei auswählen-Dialog, allerdings werden Pfad und Datei diesmal gleich auf die entsprechenden Textfelder aufgeteilt (s. Abb. 4). Die übrige Funktionalität bleibt gleich.

pic004.png

Abb. 4: Frisch eingelesener Pfad und Dateiname

Dateiangaben in gebundenen Formularen

Gelegentlich kommt es vor, dass man Pfadangaben in Tabellen speichert - beispielsweise, um den Pfad zu einem Bild eines Mitarbeiters anzugeben, das man nicht in der Datenbank speichern möchte.

Auch hier funktionieren die Textfelder für die Angabe von Pfad und/oder Dateiname und die entsprechenden Schaltflächen. Dies bezieht sich explizit auf die Öffnen-Schaltfläche, die ja nur aktiviert sein soll, wenn die angegebene Datei tatsächlich vorhanden ist.

Zwei Beispiele finden Sie in den Formularen frmDateienGebunden und frmDateienGebunden_PfadUndDatei.

Feinheiten einstellen

In der Basiseinstellung zeigt die Klasse die Dialoge zum Auswählen von Dateien mit dem Titel Datei auswählen, dem aktuellen Datenbankverzeichnis als Startverzeichnis sowie einem auf Datenbankdateien fixierten Filter an.

All diese Eigenschaften können Sie je nach Anwendungsfall individuell einstellen. Das Startverzeichnis, das der Datei auswählen-Dialog anzeigen soll, stellen Sie beispielsweise mit der Eigenschaft StartDir ein:

objFiles.StartDir = "c:\"

Auch der Filter lässt sich manuell einstellen. Die folgende Zuweisung zeigt etwa nur Access-Datenbanken mit der Dateiendung .mdb oder .accdb an:

objFiles.Filter = "Access-Dateien (*.accdb,*.mdb)"

Schließlich können Sie noch den Titel des jeweiligen Dialogs beeinflussen:

objFiles.Title = "Access-Datei auswählen"

Integration in VBA-Code

Die Klasse liefert auch die üblichen Funktionen für den Einbau in Ihren VBA-Code:

  • Datei auswählen-Dialog (ein oder mehrere Dateien)
  • Verzeichnis auswählen-Dialog
  • Speicherort auswählen-Dialog

Einfache Datei auswählen

Wenn Sie eine einzelne Datei auswählen und den Namen in einer Variablen speichern möchten, gehen Sie wie folgt vor:

Public Sub Einfachauswahl()

    Dim objFiles As clsFiles

    Dim strFile As String

    Set objFiles = New clsFiles

    With objFiles

        .StartDir = "c:\"

        .Title = "Einzelne Datei auswählen"

        .Filter = "Alle Dateien (*.*)"

        strFile = .OpenFileName

    End With

    Debug.Print strFile

End Sub

Sie erstellen also wie in den vorherigen Beispielen ein Objekt auf Basis der Klasse clsFiles, stellen die Eigenschaften für die Erscheinungsweise des Dialogs ein und zeigen diesen dann an.

Mehrfachauswahl

Auch eine Mehrfachauswahl wie in Abb. 5 lässt sich mit dieser Klasse realisieren. Die Auswahl mehrerer Dateien erfolgt dabei genau wie im Windows Explorer: Entweder Sie drücken die Umschalttaste, um alle Dateien zwischen zwei markierten Einträgen auszuwählen, oder Sie drücken die Strg-Taste und wählen gezielt Dateien aus.

pic005.png

Abb. 5: Mehrfachauswahl im Datei auswählen-Dialog

Dazu stellen Sie zusätzlich zu den Eigenschaften des vorherigen Beispiels die Option MultipleFiles auf True ein. Die OpenFileName-Methode liefert eine Zeichenkette zurück, bei der die ausgewählten Dateinamen durch das Tabulatorzeichen voneinander getrennt werden.

Dieses Ergebnis wandelt die folgende Beispielprozedur mit der Split-Funktion in ein Array mit den einzelnen Dateinamen um und gibt die enthaltenen Einträge dann innerhalb einer Schleife im Direktfenster aus:

Public Sub Mehrfachauswahl()

    Dim objFiles As clsFiles

    Dim strFiles() As String

    Dim i As Integer

    Set objFiles = New clsFiles

    With objFiles

        .StartDir = "c:\"

        .MultipleFiles = True

        .Title = "Einzelne Datei auswählen"

        .Filter = "Alle Dateien (*.*)"

        strFiles = Split(.OpenFileName, vbTab)

    End With

    For i = LBound(strFiles) To UBound(strFiles)

        Debug.Print strFiles(i)

    Next i

End Sub

Verzeichnisauswahl

Die Verzeichnisauswahl erledigt die Methode GetPath. Auch hier verwenden Sie die üblichen Eigenschaften, um das Aussehen des Dialogs zu beeinflussen sowie das Startverzeichnis festzulegen.

Public Sub Verzeichnisauswahl()

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.