Dateizugriffsklasse

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Dateizugriffsklasse

Diese Anforderung kommt bei mir immer wieder vor: Ich möchte per VBA eine Textdatei erstellen oder die Inhalte einer Textdatei einlesen. Dummerweise kann ich mir die genauen Befehle für die verschiedenen Anwendungsfälle einfach nicht merken: Datei in einem Zug einlesen, Datei zeilenweise einlesen und so weiter. Jetzt ist es so weit: Ich baue mir eine Klasse, die alle benötigten Befehle enthält und bereitstellt. Die brauche ich dann nur noch in die jeweilige Datenbank einzufügen und kann nach Lust und Laune auf Text- und andere Dateien zugreifen.

Eigentlich könnte man die Funktionen auch in einem Standardmodul unterbringen. Ich finde allerdings die Möglichkeit praktisch, eine Klasse zu erstellen, die gleich beim Start der Anwendung ihre Eigenschaften, Methoden und Funktionen bereitstellt, ohne dass ich sie erst noch instanzieren muss. Dazu sind zwar zusätzliche kleine Handgriffe nötig, aber das nehme ich in Kauf.

Im vorliegenden Beitrag füge ich die Methoden zur Klasse hinzu, die ich am häufigsten benötige. Das schließt aber nicht aus, dass nicht in nächster Zeit noch Erweiterungen folgen. Haben Sie selbst Ideen dazu, teilen Sie mir diese ruhig unter info@access-im-unternehmen.de mit!

Klasse erstellen

Als Erstes legen Sie ein neues Klassenmodul im VBA-Editor einer neuen, leeren Datenbank an. Dazu verwenden Sie den Menüeintrag Einfügen|Klassenmodul. Dieses speichern Sie gleich im Anschluss unter dem Namen FileAccess. In diesem Fall lassen wir das Präfix cls weg, weil wir die Klasse wie ein eingebautes Objekt nutzen wollen – da stört das Präfix nur. Diese Klasse exportieren Sie dann mit der folgenden Anweisung in eine Textdatei:

SaveAsText acModule, "FileAccess",  CurrentProject.Path & "FileAccess.txt"

Nun öffnen Sie das gespeicherte Klassenmodul mit einem Texteditor und ändern die nachfolgend fett gedruckten Zeilen wie angegeben ab:

Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Compare Database
Option Explicit

Danach speichern Sie den neuen Stand des Klassenmoduls in der Textdatei und lesen dieses wieder in das VBA-Projekt ein:

LoadFromText acModule, "FileAccess",  CurrentProject.Path & "FileAccess.txt

Legen Sie dann eine erste Funktion mit folgendem Inhalt an:

Public Function SaveTextAsFile(strText As String,  strFile As String)
End Function

Diese Funktion können Sie nun direkt über die Eingabe des Klassennamens ansprechen, wie auch Bild 1 zeigt:

Direkter Aufruf der Funktion per Intellisense

Bild 1: Direkter Aufruf der Funktion per Intellisense

FileAccess.SaveTextAsFile

Text in Datei speichern

Damit brauchen wir nun nur noch die gewünschten Funktionen hinzuzufügen. Den Start haben wir ja schon gemacht. Die Funktion SaveTextAsFile soll mit den beiden Parametern den zu speichernden Text sowie den Dateinamen entgegennehmen. Diese Funktion sieht nun wie folgt aus:

Public Function SaveTextAsFile(strFile As String,  strText As String) As Boolean
     Dim lngFile As Long
     lngFile = FreeFile
     Open strFile For Output As #lngFile
     Print #lngFile, strText
     Close #lngFile
     SaveTextAsFile = True
End Function

Sie ermittelt mit FreeFile zunächst eine noch nicht verwendete Dateinummer und speichert diese in der Variablen lngFile. Diese nutzt sie, um eine neue Datei zu erstellen und diese für den Schreibzugriff vorzubereiten. Dann trägt sie mit der Print-Methode den kompletten Inhalt der Varialben strText in die Datei ein. Danach schließt sie die Datei und gibt den Wert True als Funktionsergebnis auf die aufrufende Instanz zurück. Der folgende Beispielaufruf erzeugt eine Datei namens test.txt und trägt dort zwei Zeilen mit den Texten bla und blub ein:

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.