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:
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