Die VBA-eigenen Befehle wie Open, Write, Input, Close und so weiter erlauben das Erstellen, Schreiben und Lesen von Textdateien. Wenn es etwas komfortabler sein darf, gibt es jedoch noch andere Möglichkeiten. Eine davon ist die Klasse FileSystemObject, die Sie in der Bibliothek Microsoft Scripting Runtime finden. In den Artikeln Das FileSystemObject: Verzeichnisse und Das FileSystemObject: Dateien haben wir die Grundlagen zu dieser Bibliothek und zum Umgang mit Laufwerken, Verzeichnissen und Dateien erläutert. Dieser Artikel zeigt, welche Möglichkeiten diese Bibliothek im Hinblick auf den Umgang mit Textdateien bietet.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1902_FileSystemObject_Textstream.accdb.
Die TextStream-Klasse
Beim Aufruf der Methode CreateTextFile der FileSystemObject-Klasse und der Folder-Klasse werden Objekte des Typs TextStream zurückgeliefert.
Diese weisen die folgenden Eigenschaften auf:
- AtEndOfLine: Gibt an, ob sich der Zeiger am Ende der aktuellen Zeile befindet.
- AtEndOfStream: Gibt an, ob sich der Zeiger am Ende des Streams befindet.
- Close: Schließt einen offenen Textstream.
- Column: Gibt die aktuelle Spalte des Zeigers aus.
- Line: Gibt die Nummer der aktuellen Zeile des Zeigers aus.
- Read: Liest die mit dem Parameter angegebene Menge an Zeichen.
- ReadAll: Liest den kompletten Inhalt des TextStream-Objekts.
- ReadLine: Liest die jeweils folgende Zeile des TextStream-Objekts.
- Skip: Verschiebt den Zeiger um die angegebene Anzahl Zeichen in Richtung Ende des Streams.
- SkipLine: Verschiebt den Zeiger auf den Anfang der nächsten Zeile.
- Write: Fügt den Inhalt des Parameters hinter dem letzten vorhandenen Zeichen in einem Textstream-Objekt ein.
- WriteBlankLines: Fügt hinter dem letzten Zeichen des TextStream-Objekts leere Zeilen entsprechend der im Parameter angegebenen Anzahl ein.
- WriteLine: Fügt den als Parameter angegebenen Text hinter dem letzten Zeichen des TextStream-Objekts ein und hängt ein Zeilenumbruchszeichen hinten an.
Erstellen einer Textdatei und Füllen mit Text aus einer Variablen
Wenn Sie einfach nur den Inhalt einer String-Variablen in eine neue Textdatei schreiben wollen, gehen Sie wie folgt vor:
Dim strDatei As String Dim strPfad As String Dim strText As String Dim objTextstream As TextStream strDatei = Replace(FSO.GetTempName, ".tmp", ".txt") strPfad = FSO.BuildPath(CurrentProject.Path, strDatei) strText = "Dies ist ein Beispieltext." & vbCrLf strText = strText & "Und noch eine Zeile." & vbCrLf strText = strText & "Und die letzte Zeile." Set objTextstream = FSO.CreateTextFile(strPfad) With objTextstream .Write strText End With objTextstream.Close
Hier ermitteln wir einen temporären Dateinamen, bei dem wir die Dateiendung .tmp durch .txt ersetzen. Dann fügen wir diese über die Funktion BuildPath mit dem Verzeichnis der aktuellen Datenbank zu einem Pfad zusammen. Außerdem fügen wir in der Variablen strText einen mehrzeiligen Text zusammen, den wir dann zur Datei hinzufügen wollen.
Die Textdatei erstellen wir mit der CreateTextFile-Methode des FileSystemObject-Objekts, der wir als Parameter den Pfad aus strPfad übergeben.
Dann nutzen wir die Write-Methode des mit der Variablen objTextstream erstellten TextStream-Objekts, um den Inhalt der Variablen strText einzufügen.
Schließlich schließen wir die Datei mit der Close-Methode. Das Ergebnis ist eine Textdatei mit dem Text aus strText (siehe Bild 1).
Bild 1: Eine erste Textdatei mit Inhalt
TextStream-Objekt für Folder erzeugen
Nicht nur das FileSystemObject-Objekt, sondern auch das Folder-Objekt bietet die Methode CreateTextFile an.
Dieser brauchen Sie dann nur noch den Dateinamen zu übergeben, da das Zielverzeichnis ja schon im Folder-Objekt steckt:
Dim strDatei As String Dim objFolder As Folder Dim objTextstream As TextStream strDatei = Replace(FSO.GetTempName, ".tmp", ".txt") Set objFolder = FSO.GetFolder(CurrentProject.Path) Set objTextstream = objFolder.CreateTextFile(strDatei) objTextstream.Close
Text in TextStream-Objekt schreiben
Was geschieht, wenn wir die drei Zeilen in einzelnen Write-Anweisungen zum TextStream-Objekt hinzufügen
With objTextstream .Write "Dies ist ein Beispieltext." .Write "Und noch eine Zeile." .Write "Und die letzte Zeile." End With
Dann wird der Text einfach ohne Zeilenumbruch aneinander gehängt:
Dies ist ein Beispieltext.Und noch eine Zeile.Und die letzte Zeile.
Wenn der Text jeweils in einer neuen Zeile geschrieben werden soll, verwenden Sie die WriteLine-Methode:
With objTextstream .WriteLine "Dies ist ein Beispieltext." .WriteLine "Und noch eine Zeile." .WriteLine "Und die letzte Zeile." End With
Dies hängt an den Text jeweils noch einen Zeilenumbruch an. Genau genommen könnten wir uns den bei der letzten Zeile sparen:
With objTextstream .WriteLine "Dies ist ein Beispieltext." .WriteLine "Und noch eine Zeile." .Write "Und die letzte Zeile." End With
Leere Zeilen einfügen
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: