Die Excel Wühlkiste

Umgang mit Dateien und Verzeichnissen

...per Dialog
   Hier wird eine kleinere Sammlung von Codebeispielen zum Umgang mit Dateinamen und Verzeichnissen vorgestellt.
   Wenn wir den Pfad zu einer Datei genau kennen und auch den nötigen Dateinamen wissen, dann können wir diese Informationen im VBA Code direkt notieren. Aber oft ist es erforderlich, den Anwender selber einen Pfad, eine Datei oder beides wählen oder suchen zu lassen. Das kann zum Beispiel erforderlich sein, wenn das VBA Programm in unterschiedlichen Umgebungen eingesetzt wird und der Programmierer deshalb die nötigen Informationen nicht haben kann. Auch wenn der Anwender den Speicherort frei wählen können soll, ist es besser einen Dateidialog zu starten, als die nötigen Informationen per InputBox von Hand eingeben zu lassen. Das geht zum einen sehr viel komfortabler und Fehler in Form von Verschreiben sind ausgeschlossen.
   Hierzu gibt es sehr nützliche und zum Teil auch sehr mächtige Funktionen, wovon einige hier in loser Reihenfolge vorgestellt werden.

   Wird bei Gelegenheit ständig erweitert. Auf Wunsch können auch gerne Beispiele von Lesern eingefügt werden.

 

GetOpenFilename
   kann laut VBA-Hilfe unter Umständen das aktuelle Verzeichnis neu festlegen. Sehr witzig ist die Betonung auf "kann". Bei mir funktioniert das immer. Dennoch sei darauf hingewiesen, dass Microsoft dieses "kann" sicher nicht völlig ohne Grund angegeben hat. Zur Sicherheit bitte zusätzlich den eingelesenen Pfad mit ChDrive und ChDir festlegen, wenn GetOpenFilename darin einmal versagen sollte.
   Ausserdem kann man mit ChDrive und ChDir das Startverzeichnis für GetOpenFilename sehr komfortabel festlegen. Dann muss der Anwender nicht soviel mit der Maus klicken.
Sub DateiEineDatei()
'Name und Pfad einer Datei einlesen
Dim varDatei As Variant

    'Startverzeichnis festlegen:
    ChDrive "G:"                 'erst das Laufwerk voreinstellen (bes. im Netzwerk oder bei mehreren Festplatten)
    ChDir "G:\My Music Folder1" 'dann erst den Pfad vorbelegen

    varDatei = Application.GetOpenFilename _
       ("MP3-Dateien (*.mp3), *.mp3")

    If varDatei = False Then Exit Sub

    'weitere Programmausführung hier ausserhalb von If...End If

    Debug.Print varDatei
    Debug.Print Dir(varDatei)

    Debug.Print Left(varDatei, Len(varDatei) - Len(Dir(varDatei)))

End Sub

Sub DateiEineDatei2()
'Name und Pfad einer Datei einlesen
Dim varDatei As Variant

    varDatei = Application.GetOpenFilename("Excel-Arbeitsmappen,*.xls," & _
    "Alle Excel-Dateien,*.xl?", 2, "Bitte wählen Sie eine Datei aus!")

    If varDatei = False Then
        MsgBox "Sie haben abgebrochen."
        Exit Sub
    Else
        'weitere Programmausführung hier innerhalb von If...End If
        Debug.Print "Sie haben '" & varDatei & "' ausgewählt."

    End If
End Sub

Sub DateiMehrereDateien()

'Name und Pfad mehrerer Dateien einlesen

Dim varDatei As Variant
Dim i As Integer

    'Optionale Voreinstellung des Pfades:
    ChDrive "G:"                 'erst das Laufwerk voreinstellen
    ChDir "G:\My Shared Folder1" 'dann erst den Pfad vorbelegen

    'Die VBA Hilfe erklärt die Funktion GetOpenFilename sehr verständlich
    varDatei = Application.GetOpenFilename("MP3-Dateien,*.mp3," & _

    "Alle Musik-Dateien,*.mp3;*.ogg, Nur OGG-Dateien,*.ogg", 2, "Musikdatei auswählen", , True)

    'weitere Programmausführung hier innerhalb von If...End If
    If IsArray(varDatei) Then

        For i = 1 To UBound(varDatei)

            'Ubound Gibt einen Wert vom Typ Long zurück, der den größten
            'verfügbaren Index für die angegebene Dimension eines Datenfeldes enthält.
            'Hier: des Datenfeldes "varDatei"

            'schreibt nur den Dateinamen in A1, A2, A3....  :

            Range("A" & i).Value = Dir(varDatei(i))

            'schreibt nur den Pfad in B1, B2, B3....  :
            Range("B" & i).Value = Left(varDatei(i), Len(varDatei(i)) - Len(Dir(varDatei(i))))

        Next
        MsgBox "Fertig!" & vbCrLf & "Glückwunsch"
    Else

        MsgBox "Abbruch durch User"
    End If
End Sub

Sub DateiMehrereDateien2()
'Name und Pfad mehrerer Dateien einlesen

Dim varDatei As Variant
Dim i As Integer

    'Optionale Voreinstellung des Pfades:
    ChDrive "G:"                 'erst das Laufwerk voreinstellen
    ChDir "G:\My Shared Folder1" 'dann erst den Pfad vorbelegen

    'Die VBA Hilfe erklärt die Funktion GetOpenFilename sehr verständlich
    varDatei = Application.GetOpenFilename("MP3-Dateien,*.mp3," & _

    "Alle Musik-Dateien,*.mp3;*.ogg, Nur OGG-Dateien,*.ogg", 2, "Musikdatei auswählen", , True)

    If Not IsArray(varDatei) Then
        MsgBox "Abbruch durch User"

    End If

    'weitere Programmausführung hier ausserhalb von If...End If
    For i = 1 To UBound(varDatei)

        'Ubound Gibt einen Wert vom Typ Long zurück, der den größten
        'verfügbaren Index für die angegebene Dimension eines Datenfeldes enthält.
        'Hier: des Datenfeldes "varDatei"

        'schreibt nur den Dateinamen in A1, A2, A3....  :

        Range("A" & i).Value = Dir(varDatei(i))

        'schreibt nur den Pfad in B1, B2, B3....  :
        Range("B" & i).Value = Left(varDatei(i), Len(varDatei(i)) - Len(Dir(varDatei(i))))

    Next
    MsgBox "Fertig!" & vbCrLf & "Glückwunsch"
End Sub

Die Excel Wühlkiste
Valid HTML 4.01 Strict
letzte Aktualisierung: 13.02.2009
Autor: Hubert Scheidgen / 04.02.2009
W3C CSS-Validierungsservice