Dateien und Verzeichnisse

Anders als der Name „Visual Basic für Applikationen“ vermuten lässt, kann VBA nicht nur auf Applikationen, sondern auch auf das Dateisystem zugreifen. Dabei gilt ein Laufwerk als aktuelles Laufwerk, und in jedem Laufwerk ein Verzeichnis als aktuelles Verzeichnis. Da in der Praxis häufig mehrere der folgenden Befehle zusammen benötigt werden, folgt hier nur ein Beispiel für alle Befehle gemeinsam, das einige Informationen aus einem Verzeichnis im Debug-Fenster anzeigt.

Diese Befehle sind eigentlich veraltet und durch das FileSystemObject ersetzt (wird mit CreateObject("Scripting.FileSystemObject") eingebunden, für Early Binding kann ein Verweis auf die „Microsoft Scripting Runtime“ gesetzt werden). Gelegentlich sind die folgenden Befehle aber einfach bequemer.

Sub Dateien()
Dim Datei As String

ChDrive "c"
ChDir "C:\Windows"

Datei = Dir(CurDir & "\")

Do Until Datei = ""
    Debug.Print Datei, GetAttr(Datei), FileDateTime(Datei), FileLen(Datei)
    Datei = Dir
Loop

End Sub

ChDir

ChDir(Path As String)

Wechselt das aktuelle Verzeichnis. Wenn in Path keine Laufwerksbezeichnung enthalten ist, ist das aktuelle Laufwerk betroffen, ansonsten das angegebene Laufwerk. Es sind auch relative Pfadangaben erlaubt.

ChDrive

ChDrive(Drive As String)

Wechselt das aktuelle Laufwerk. Drive muss mit einem Buchstaben beginnen, weitere Zeichen werden ignoriert. Der Buchstabe muss einer gültigen Laufwerksbezeichnung entsprechen.

CurDir

CurDir([Drive As Variant]) As Variant

Gibt das aktuelle Verzeichnis zurück. Ist Drive nicht angegeben, wird das aktuelle Verzeichnis des aktuellen Laufwerks zurückgegeben. Wenn Drive angegeben ist, muss es mit einem Buchstaben beginnen, weitere Zeichen werden ignoriert. Der Buchstabe muss einer gültigen Laufwerksbezeichnung entsprechen.

Dir

Dir([PathName As Variant, [Attributes As VbFileAttribute = vbNormal]]) As String

Gibt den Namen einer Datei, eines Laufwerks oder eines Verzeichnisses zurück, auf die das Suchmuster aus PathName passt. Falls PathName keine Laufwerks- und Verzeichnisangaben enthält, wird auf CurDir zugegriffen. Auch die Platzhalterzeichen ? (für ein einzelnes Zeichen) und * (für beliebig viele Zeichen) sind möglich. Wird Pathname angegeben, kann mit Werten aus der Aufzählung VbFileAttribute die Suche auf Dateiattribute ausgedehnt werden. Mehrere dieser Werte können addiert werden.

Beim ersten Aufruf von Dir muss zwingend ein Pathname angegeben werden. Um weitere Dateinamen zu erhalten, die dem Suchmuster entsprechen, kann Dir danach ohne Argumente erneut aufgerufen werden, bis die Zeichenfolge "" zurückgegeben wird.

Die Reihenfolge, in der Dir Dateien zurückgibt, ist zufällig. In der Praxis werden die Rückgabewerte häufig in einem Array abgespeichert und dort sortiert bzw. in sonstiger Weise verarbeitet.

FileDateTime

FileDateTime(PathName As String) As Variant

Gibt Datum/Zeit der letzten Änderung von PathName zurück. PathName muss der Name einer existierenden Datei oder Verzeichnisses sein. Falls PathName keine Laufwerks- und Verzeichnisangaben enthält, wird auf CurDir zugegriffen.

FileLen

 FileLen(PathName As String) As Long

Gibt die Größe von PathName zurück. PathName muss der Name einer existierenden Datei oder Verzeichnisses sein (Bei Verzeichnisen wird natürlich immer „0“ zurückgegeben). Falls PathName keine Laufwerks- und Verzeichnisangaben enthält, wird auf CurDir zugegriffen.

GetAttr

GetAttr(PathName As String) As VbFileAttribute

Gibt die Dateiattribute von PathName zurück. PathName muss der Name einer existierenden Datei oder Verzeichnisses sein. Falls PathName keine Laufwerks- und Verzeichnisangaben enthält, wird auf CurDir zugegriffen.