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
etliche 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 aber auch 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). Nachdem man die Microsoft Office Object Libary
eingebunden hat, lässt sich leicht ein Dateidialog anzeigen:
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:
msoFileDialogFolderPicker
wählt nur einen Pfad, keine
Datei ausmsoFileDialogOpen
wählt eine Datei aus, die danach mit
der Execute
-Methode des FileDialogs geöffnet werden kann.
Das Öffnen erfolgt durch die jeweilige Applikation - läuft der Code also
z. B. gerade in Excel, sollte also auch eine Exceldatei ausgewählt
werdenmsoFileDialogSaveAs
wählt einen Dateinamen aus, unter
dem die aktuelle Datei anschließend mit der Execute
-Methode
des FileDialogs gespeichert werden kann