Neues VBA Lernstoff Kontakt

Das FileDialog Objekt

Das FileDialog Objekt wurde mit Office XP eingeführt. Damit wurden die Microsoft Office Anwendungen mit neuen/einheitlichen Öffnen und Speichern Dialogen ausgestattet. Wie Sie diese Dialoge mit VBA verwenden können, zeigt der folgende Artikel. Die erforderlichen Objekte (Methoden, Eigenschaften u. Konstanten) sind, wie alle gemeinsamen Features der Office Anwendungen, in der Office xx.x Object Library enthalten. Über Extras/Verweise können Sie die Object Library hinzufügen.

Der zugehörige Objektmodellausschnitt:

Objektmodell Ausschnitt

Jede Office Anwendungen hat eine Instanz des FileDialog-Objekts. Einen Zugriff darauf bekommen Sie über die FileDialog Eigenschaft der Application:


    Dim oFileDialog As FileDialog
    Set oFileDialog = Application.FileDialog(MsoFileDialogType)

Es gibt vier verschiedene MsoFileDialogTypen:


    Public Enum MsoFileDialogType
        msoFileDialogOpen=1
        msoFileDialogSaveAs=2
        msoFileDialogFilePicker=3
        msoFileDialogFolderPicker=4
    End Enum

Die wichtigsten Eigenschaften und Methoden an Beispielen:

Einen Ordner auswählen mit dem FolderPicker


    Dim oFileDialog As FileDialog
    Set oFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    With oFileDialog
        .Title = "Wählen Sie bitte den gewünschten Ordner aus!"
        .ButtonName = "Weiter"
        .Show
    End With

Mit der ButtonName - Eigenschaft können Sie die Beschriftung der Standardschaltfläche (Öffnen) verändern.

Mit der InitialFileName Eigenschaft können Sie vorgeben, welcher Ordner ausgewählt werden soll. z.B. in Word:


    .InitialFileName = ActiveDocument.Path & "\*.docx"

Die Show-Methode zeigt den Dialog an und gibt einen Integer Wert zurück, der über den verwendeten Button zum Schließen Auskunft gibt. Das Systemmenüfeld und die Abbrechen Schaltfläche geben 0 zurück. Die Ok oder Öffnen Schaltfläche -1 (ist true)


    If .Show = True Then
        MsgBox .SelectedItems(1)
    Else
        MsgBox "Abbruch"
    End If

Die SelectedItems Eigenschaft gibt eine FileDialogsSelectedItems Auflistung zurück. Im Falle der Ordner Auswahl kann es nur einer sein.

Dateien auswählen mit dem FilePicker

Bei diesem Dialog können Sie mit der AllowMultiSelect Eigenschaft festlegen, ob mehrere Dateien ausgewählt werden dürfen. Die Auswahl wird nacheinander in einer For Each Schleife verarbeitet:


    Sub BspDateienAuswählen()
        Dim oFileDialog As FileDialog
        Set oFileDialog = Application.FileDialog(msoFileDialogFilePicker)
        With oFileDialog
            .Title = "Grafiken auswählen"
            .ButtonName = "Katalog erstellen"
            .AllowMultiSelect = True
            If .Show = True Then
                Dim vItem As Variant
                For Each vItem In .SelectedItems
                'Verarbeitung starten
                    MsgBox vItem
                Next
            End If
        End With
    End Sub

Über die InitialView Eigenschaft legen Sie die verwendete Ansicht im Dialog fest. z.B. Miniaturansichten:


    .InitialView = msoFileDialogViewThumbnail

FileDialogFilters

Mit FileDialogFilters legen Sie die Auswahl an Dateitypen Ihrer Dialoge fest.


    With oFileDialog
        .Filters.Clear
        .Filters.Add "Alles", "*.*"
        .Filters.Add "Nur die Texte", "*.rtf;*.txt;*.doc", 1
        ...

Die Clear Methode löscht eventuell bereits vorhandene Filter. Mit Add können Sie weitere hinzufügen. Der Add Methode können Sie neben Beschreibung und Extensionen noch eine optionale Zahl mitgeben, mit der die Reihenfolge der Filter festgelegt wird.

Dateien öffnen oder speichern

Mit den beiden übrig gebliebenen FileDialogs msoFileDialogOpen und msoFileDialogSaveAs bilden Sie die Standard öffnen und speichern unter Dialoge von Word nach.

Für diese beiden Dialoge gibt es die Execute Methode, die anschließend das eigentliche öffnen oder speichern übernimmt. Sie hat unmittelbar nach der Show Methode zu folgen.


        If .Show = True Then
           .Execute
        End If

Fazit

Diese Dialoge erfüllen sicherlich alles was an Öffnen, Einfügen und Speicherfunktionalität in benutzerdefinierten Anwendungen benötigt wird. Eine einheitliche Handhabung dieser Dialoge über alle Office Anwendungen ist zu begrüßen. Leider bietet einem hier VBA bei der Programmierung einige Methoden an, die in der Anwendung gar nicht möglich sind (z.B. dürfen Sie bei Speichern unter .. keine Filter setzen)

[⇑]