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. Da in der Praxis häufig jeweils mehrere der folgenden Befehle zusammen benötigt werden, folgt hier nur ein Beispiel für mehrere Befehle gemeinsam.

Diese Befehle sind eigentlich veraltet. Für einen moderneren, objektbasierten Zugriff wurde das FileSystemObject eingeführt. Aber die folgenden Befehle sind oft bequemer zu benutzen, und wenn z. B. der Befehl Dir mit Platzhalterzeichen verwendet wird, ist er in der Praxis schneller als eine entsprechende Schleife zur Auswertung eines Filesystemobjects.

Für einige Befehle gilt ein Laufwerk als aktuelles Laufwerk, und in jedem Laufwerk ein Verzeichnis als aktuelles Verzeichnis. Die folgende Prozedur gibt einige Informationen aus einem Verzeichnis im Debug-Fenster aus.

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.