Oftmals braucht man zum Speichern oder Öffnen einen Datei/Folder-Selector. Mit Office XP wurde dazu das FileDialog-Objekt eingeführt.

Hauptelement ist folgender Bestandteil

> Dim fldr As FileDialog

>  Set fldr = Application.FileDialog(XXYY)

Zur Auswahl stehen: (MsoFileDialogType)

Die zwei wichtigsten hierbei sind der Zugriff auf Ordner-Pfade (GetFolder) und der Zugriff auf Datei-Pfade (GetFile)

GetFolder

' Funktion zum Auswählen eines Ordners über ein Dialogfeld
Public Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
' Initialisierung des Ordnerauswahldialogs
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder" ' Setzt den Titel des Dialogs
.AllowMultiSelect = False ' Erlaubt keine Mehrfachauswahl
.InitialFileName = strPath ' Setzt den anfänglichen Pfad
' Zeigt den Dialog an und prüft, ob ein Ordner ausgewählt wurde
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1) ' Speichert den ausgewählten Pfad
End With
NextCode:
GetFolder = sItem ' Gibt den ausgewählten Ordnerpfad zurück
Set fldr = Nothing ' Bereinigt das Dialogobjekt
End Function
msoFileDialogFilePicker3
msoFileDialogFolderPicker   4
msoFileDialogOpen1
msoFileDialogSaveAs2

GetFile

' Funktion zum Auswählen einer Datei über ein Dialogfeld
Public Function GetFile(strPath As String) As String
Dim filedr As FileDialog
Dim pickedfile As Boolean
Dim myfile As String
' Initialisierung des Dateiauswahldialogs
Set filedr = Application.FileDialog(msoFileDialogFilePicker)
With filedr
.InitialFileName = strPath ' Setzt den anfänglichen Pfad
.AllowMultiSelect = False ' Erlaubt keine Mehrfachauswahl
.Title = "Select File" ' Setzt den Titel des Dialogs
.Filters.Clear ' Löscht vorhandene Filter
.Filters.Add "Picture Files", "*.jpg" ' Fügt Filter für Bilddateien hinzu
.Filters.Add "All Files", "*.*" ' Fügt Filter für alle Dateitypen hinzu
pickedfile = False
pickedfile = .Show ' Zeigt den Dialog an und speichert das Ergebnis
' Wenn eine Datei ausgewählt wurde
If pickedfile Then
myfile = .SelectedItems.Item(1) ' Speichert den ausgewählten Dateipfad
End If
End With
End Function

Links: