Dateidialog

Durch das Konzept der Objektbibliotheken kann VBA um zusätzliche Möglichkeiten erweitert werden. Das ist sinnvoll für Funktionen, die nur selten bzw. nur unter bestimmten Bedingungen gebraucht werden. Ein typisches Beispiel dafür ist die Microsoft Office Object Libary, in der sich zahlreiche verschiedene Funktionalitäten finden. Manche davon sind wohl eher nur für bestimmte oder wenige Applikationen sinnvoll.

Zu den Möglichkeiten dieser Bibliothek gehört seit Version 2010 unter anderem ein Dateidialog, mit dem ein User Dateien oder Verzeichnisse auswählen kann. Das Aussehen des Dialogs kann dabei individuell angepasst werden. So ein Dialog kann sinnvoll sein, wenn der User aus einer Datei heraus auf die Daten einer anderen zugreifen soll (Aufteilung der Anwendung in Frontend und Backend), oder um sicherzustellen, dass z. B. die Daten verschiedener Kunden unabhängig voneinander gespeichert werden (Mandantenfähigkeit). Ist die Microsoft Office Object Libary eingebunden, lässt sich leicht ein Dateidialog anzeigen:

Dateidialog

Dafür sind nur wenige Codezeilen notwendig.

Public Function DateiName() As String
Dim f As Office.FileDialog
Set f = Application.FileDialog(msoFileDialogFilePicker)

f.Show

If f.SelectedItems.Count > 0 Then ' Prüfen auf 'Abbrechen'-Button
    DateiName = f.SelectedItems(1)
End If
End Function

Letztlich muss nur ein Filedialogobjekt erstellt und aufgerufen werden. Sobald dessen Show-Methode aufgerufen wird, stoppt die Ausführung des Codes, bis das Dialogfenster wieder geschlossen wird. Die Funktion gibt dann einen Dateinamen einschließlich kompletten Pfads als String zurück.

Das Aussehen des Dialogfensters kann mit einigen Eigenschaften angepasst werden. Hier noch einmal die obige Funktion, mit einigen Erweiterungen.

Public Function Dateiname() As String
Dim f As Office.FileDialog
Set f = Application.FileDialog(msoFileDialogFilePicker)

With f
    .Title = "Mein Dialog"                    'Fenstertitel
    .AllowMultiSelect = False                 'Nur eine Datei auswählbar
    .ButtonName = "Auswählen"                 'Button Beschriftung
    .Filters.Clear                            'erst alle Filter löschen
    .Filters.Add "Excel-Dateien", "*.xl*"     'dann eigene anlegen
    .Filters.Add "Word-Dateien", "*.do*"
    .Filters.Add "Access-Dateien", "*.mdb; *.accdb"
    .FilterIndex = 2                          'einen Filter vorselektieren
    .InitialFileName = "D:\"                  'Startverzeichnis
    .Show
End With

If f.SelectedItems.Count > 0 Then
    Dateiname = f.SelectedItems(1)
End If

End Function

In den bisherigen Beispielen hieß es stets FileDialog(msoFileDialogFilePicker). Schließlich haben wir ja bisher auch nur Dateien ausgewählt. Aber anstelle von msoFileDialogFilePicker sind noch andere Werte einstellbar: