Abfrage oder Tabelle ‚Zeichengetrennt‘ in Textdatei speichern

Die landläufige Methode eine Abfrage oder eine Tabelle als Txt-Datei zu speichern ist die Docmd.OutputTo() Methode.
Informationen dazu findet ihr hier: http://msdn.microsoft.com/en-us/library/office/…
Um aber Zeichengetrennte Textdateien zu erstellen, d.h. jede Zeile ein Datensatz, jedes Feld in der Zeile durch einen Separator getrennt, muss man die Methode Docmd.TransferText() incl. Exportspezifikation erstellen. http://msdn.microsoft.com/en-us/library/office/… Das wäre sicherlich der einfachste Weg.
Falls aber die Exportspezifikation aber nicht mehr genügt, kann man mittels Output-Stream eine Textdatei zu erstellen, eine Abfrage oder Tabelle in ein Recordset packen und zeilenweise durchlaufen und in die Textdatei zu schreiben. Und mit den Worten von Jean Pütz sag ich: „ich hab da mal was vorbereitet“:
Sub Table2Textfile(ByVal Outputfile As String, ByVal TableName As String, _ Optional Separator As String = ";", _ Optional titlebar As Boolean = False) Dim rs As DAO.Recordset Dim strTableRow As String Dim filenum As Long Dim i As Long filenum = FreeFile Set rs = CurrentDb.OpenRecordset(TableName) Open Outputfile For Output As #filenum 'Spaltenköpfe If titlebar Then For i = 0 To rs.Fields.Count - 1 strTableRow = strTableRow & rs(i).Name & Separator Next i strTableRow = Left(strTableRow, Len(strTableRow) - Len(Separator)) Write #filenum, strTableRow strTableRow = vbNullString End If Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 strTableRow = strTableRow & rs(i) & Separator Next i strTableRow = Left(strTableRow, Len(strTableRow) - Len(Separator)) Write #filenum, strTableRow strTableRow = vbNullString rs.MoveNext Loop Close #filenum rs.Close Set rs = Nothing End Sub
Dies ist eine universelle Prozedur mit dem man Abfragen bzw. Tabellen schnell in eine separierte Liste bringen kann.
In einer Schleife über alle Recordset-Felder wird der String zusammengestellt, welcher in die Textdatei gespeichert wird.
Ebenso die Spaltenköpfe welche mit rs(Zeilennummer).Name auszulesen sind.
Die Prozedur welche obige Prozedur aufruft sieht dann z.B. so aus:
Sub Tester() Table2Textfile "c:\users\Public\test4711.txt", "qryTeilnehmer", ";", True End Sub
Anstatt eines Separators als String kann man natürlich auch VBA-Konstanten verwenden, z.B. vbTab bietet sich hier an, Verwendung ohne Anfürungszeichen!
Ein Wermutstropfen bleibt aber übrig. In der erstellten Textdatei sind die einzelnen Textzeilen in Anführungszeichen. D.h. vor dem Weiterverarbeiten müsste man eventuell mittels FileSystemObject ran gehen und die einzelnen Zeilen bearbeiten – oder falls per VBA die Weiterverarbeitung stattfindet kann man die Bereinigung auch im VBA-Code machen.
Bis dahin
© 2014 Andreas Vogt