Home > Artikel > Ausgabe 6/2012 > Dateibefehle

Dateibefehle

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

VBA bietet eine Reihe von Dateibefehlen, mit denen Sie Verzeichnisse anlegen, Verzeichnisse entfernen, das aktuelle Arbeitsverzeichnis ermitteln, das Arbeitsverzeichnis ändern, Dateien löschen und sogar komplette Verzeichnishierarchien neu anlegen. Dieser Artikel liefert die Grundlagen zu diesen Befehlen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1206_Dateibefehle.mdb.

Dateizugriffe

Der Artikel Textdateien stellt die Möglichkeiten zum Erstellen und zum Lesen von Textdateien vor. Dort gibt es eine Methode namens Open, die je nach Dateimodus eine bestehende Textdatei öffnet oder eine neue Datei erstellt. Was hat das mit dem vorliegenden Artikel zu tun? Ganz einfach: Die Open-Anweisung erwartet die Angabe des Dateinamens. Dabei können Sie wählen zwischen der Angabe des Dateinamens inklusive Verzeichnis oder nur des Dateinamens. Wenn Sie das Verzeichnis mit angeben, ist genau definiert, auf welche Datei die Open-Anweisung sich beziehen soll. Falls aber wie im folgenden Beispiel nur ein Dateiname angeben wurde, ermittelt VBA selbst den Pfad:

Open "Test.txt" For Input As #1

Aktuelles Verzeichnis ermitteln

Und woher bezieht VBA den Ort der betroffenen Datei? Dieser wird intern gespeichert und kann über die Funktion CurDir ausgelesen werden. Ein Aufruf im Direktfenster des VBA-Editors sieht beispielsweise wie folgt aus:

Debug.Print CurDir

C:\Users\Andre\Documents

Das bedeutet, dass die Open-Anweisung dem Dateinamen ohne Angabe eines Verzeichnisses die intern gespeicherte und mit CurDir zu ermittelnde Pfadbezeichnung voranstellt.

Aktuelles Verzeichnis ändern

Wenn sich die Dateioperationen innerhalb einer Anwendung immer auf das gleiche Verzeichnis beziehen, ist es sinnvoll, dieses Verzeichnis an die eigenen Bedürfnisse anzupassen. Da trifft es sich gut, dass VBA mit ChDir auch eine Funktion zum Festlegen eines neuen aktuellen Verzeichnisses liefert. Sie können den Wert von CurDir beispielsweise auf den Pfad zur aktuell geöffneten Datenbank einstellen:

ChDir Currentproject.Path

Die anschließende Prüfung liefert das erwartete Ergebnis:

Debug.Print CurDir

C:\Daten\Fachartikel\AiUBasic\Basics󡆜⏶\Dateibefehle

CurDir liefert für jedes Laufwerk ein eigenes aktuelles Verzeichnis. Um das aktuelle Verzeichnis eines anderen Laufwerks als c:\ zu ermitteln, geben Sie den Laufwerksbuchstaben in Anführungszeichen als Parameter der CurDir-Funktion an:

Debug.Print CurDir("h")

h:\Daten

Wenn Sie das aktuelle Verzeichnis für ein bestimmtes Laufwerk ändern möchten, geben Sie einfach den kompletten Pfad samt Laufwerksbuchstaben an:

ChDir("h:\Daten\Accessprojekte")

Wie die folgende Prüfung ergibt, funktioniert es:

Debug.Print CurDir("h")

h:\Daten\Accessprojekte

CurDir liefert ohne Parameter standardmäßig das aktuelle Verzeichnis des Laufwerks c:\. Wenn Sie möchten, dass CurDir ohne Parameter das aktuelle Verzeichnis eines anderen Laufwerks liefert, stellen Sie das Standardlaufwerk entsprechend mit der Funktion ChDrive ein:

ChDrive "h"

CurDir liefert dann Folgendes:

Debug.Print CurDir

h:\Daten\Accessprojekte

Dateien löschen

Während die im Artikel Textdateien vorgestellte Open-Anweisung nicht nur zum Öffnen, sondern auch zum Anlegen von Textdateien genutzt werden kann, fehlt noch ein Pendant zum Löschen von Dateien – in diesem Fall nicht nur von Textdateien. Diese Methode heißt Kill. Diese Methode erwartet lediglich den Dateinamen als Parameter:

Kill CurrentProject.Path & "\test.txt"

Wenn Sie keinen Pfad angeben, verwendet auch die Kill-Methode das mit CurDir ermittelte Verzeichnis.

Verzeichnis erstellen

Neue Verzeichnisse erstellen Sie mit der Methode MkDir. Wenn Sie MkDir nur den Namen des zu erstellenden Verzeichnisses übergeben, also etwa wie im folgenden Aufruf, erzeugt VBA – Sie ahnen es bereits – das neue Verzeichnis im mit CurDir zu ermittelnden aktuellen Verzeichnis:

MkDir "Test"

Obiger Aufruf würde also das Verzeichnis c:\Daten\Test erzeugen, wenn CurDir das Verzeichnis c:\Daten liefert. Dabei können übrigens kaum Fehler auftreten – im Gegensatz zur Variante mit Angabe des Verzeichnisses. Wenn Sie beispielsweise zwei verschachtelte Unterverzeichnisse namens Test1 und Test2 unter c:\Daten erzeugen möchten, gelingt dies nicht in einem einzigen Schritt – Sie erhalten dann nämlich den Fehler aus Bild 1.

Fehler beim Versuch, zwei Verzeichnisse auf einmal zu erstellen

Bild 1: Fehler beim Versuch, zwei Verzeichnisse auf einmal zu erstellen

Stattdessen erledigen Sie diese Aufgabe in zwei Schritten:

MkDir "c:\Daten\Test1"

MkDir "c:\Daten\Test1\Test2"

Löschen von Verzeichnissen

Das Löschen eines Verzeichnisses erledigen Sie mit der RmDir-Methode. Auch diese erlaubt nur das Löschen eines Verzeichnisses gleichzeitig, genau genommen sogar nur das Löschen leerer Verzeichnisse.

Wenn Sie die zuvor angelegten Verzeichnisse wie folgt löschen wollten, würde folgende Anweisung einen Laufzeitfehler 75, Fehler bei Zugriff auf Datei, auslösen:

RmDir "c:\Daten\Test1\"

Sie benötigen also wieder zwei Anweisungen, wobei erst das zuletzt angelegte Verzeichnis entfernt werden muss:

RmDir "c:\Daten\Test1\Test2"

RmDir "c:\Daten\Test1\"

Den Fehler 75 erhalten Sie übrigens auch, wenn Sie versuchen, ein bereits vorhandenes Verzeichnis anzulegen.

Vorhandensein von Dateien und Verzeichnissen prüfen

Da ist es doch hilfreich, dass es eine Funktion gibt, mit der Sie das Vorhandensein von Dateien und Verzeichnissen prüfen können. Wenn Sie beispielsweise wissen wollen, ob das Verzeichnis c:\Daten\Test1 bereits vorhanden ist, setzen Sie die folgende Anweisung ab:

Debug.Print Dir("c:\Daten\Test1", vbDirectory)

Test1

Der zweite Parameter muss beim Prüfen eines Verzeichnisses unbedingt den Wert vbDirectory aufweisen, der erste den zu prüfenden Verzeichnisnamen ohne folgendes Backslash-Zeichen (\). Ist das Verzeichnis vorhanden, liefert Dir den Namen des gesuchten Unterverzeichnisses zurück.

Auf Laufwerk prüfen

Gegebenenfalls möchten Sie prüfen, ob ein Laufwerk verfügbar ist. Das ist insbesondere hilfreich, wenn Sie einen Dateinamen samt Laufwerk und Pfad in einer Anwendung speichern und diese Anwendung auf einen anderen Rechner übertragen, der dieses Laufwerk nicht bereitstellt. Dann können Sie vor dem Zugriff prüfen, ob es das Laufwerk überhaupt gibt. Wenn Sie prüfen möchten, ob ein Laufwerk vorhanden ist, geben Sie als ersten Parameter den Laufwerkbuchstaben an und als zweiten die Konstante vbVolume. Ist das Laufwerk vorhanden, liefert Dir die Bezeichnung zurück:

Debug.Print Dir("c:\", vbVolume)

BOOTCAMP

In einer Prozedur würden Sie daher die Länge des zurückgelieferten Ausdrucks auswerten:

Public Sub LaufwerkVorhanden()

     If Len(Dir("d:\", vbVolume)) = 0 Then

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!