Access VBA-Skript Abfrageergebnis im CSV-Format in Textdatei schreiben
Hallo liebe Forenmitglieder,
ich habe mir ein VBA-Skript zusammenkopiert, das das Ergebnis einer (Access-) Abfrage in eine Textdatei schreiben soll. Dieses funktioniert prinzipiell bereits, die Ausgabe entspricht allerdings noch nicht ganz meinen Bedürfnissen.
Aktuell sieht die Ausgabe folgendermaßen aus (ohne Semikolon):
BE-009511 1 551576 4 StFaltenbalg-Saugnapf 1,5-fach 40mmFesto1372910
BE-009511 2 260221 1 StNäherungsschalter 24V M12Festo8152201
So muss das Ergebnis aussehen (mit Semikolon):
BE-009511;1;551576;4;St;Faltenbalg-Saugnapf 1,5-fach 40mm;Festo;1372910
BE-009511;2;260221;1;St;Näherungsschalter 24V M12;Festo;8152201
Dies ist aktuell meine VBA-Abfrage:
Wie muss der zwischen ** markierte Code aussehen, so dass die einzelnen Spaltenwerte durch ";" getrennt ausgegeben werden?
Vielen Dank für die Unterstützung.
ich habe mir ein VBA-Skript zusammenkopiert, das das Ergebnis einer (Access-) Abfrage in eine Textdatei schreiben soll. Dieses funktioniert prinzipiell bereits, die Ausgabe entspricht allerdings noch nicht ganz meinen Bedürfnissen.
Aktuell sieht die Ausgabe folgendermaßen aus (ohne Semikolon):
BE-009511 1 551576 4 StFaltenbalg-Saugnapf 1,5-fach 40mmFesto1372910
BE-009511 2 260221 1 StNäherungsschalter 24V M12Festo8152201
So muss das Ergebnis aussehen (mit Semikolon):
BE-009511;1;551576;4;St;Faltenbalg-Saugnapf 1,5-fach 40mm;Festo;1372910
BE-009511;2;260221;1;St;Näherungsschalter 24V M12;Festo;8152201
Dies ist aktuell meine VBA-Abfrage:
Private Sub Warenkorb_Datei_Click() ' Warenkorb.txt Datei mit Zeichnungen einer Anfrage erstellen
Dim fileName As String
Dim rs As Recordset
Dim db As Database
Dim queryName As String
Dim f As Field
Dim MyValue1 As String
Dim Message, Title, Default, MyValue
Message = "Bitte Bestellnummer eingeben:" ' Set prompt
Title = "InputBox" ' Set title.
Default = "" ' Set default
MyValue1 = InputBox(Message, Title, Default)
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"
fileName = "c:\Users\slro\Warenkorb.txt"
Set db = CurrentDb
Set rs = db.OpenRecordset(queryName)
Open fileName For Output As #1
**
'Print #1, " ";
'For Each f In rs.Fields
'Print #1, vbTab & f.Name;
'Print #1, f.Name;
'Next f
'Print #1,
Do While Not rs.EOF
'Print #1, Format(rs.AbsolutePosition + 1, "00000");
For Each f In rs.Fields
'Print #1, vbTab & f.Value;
Print #1, f.Value;
Next f
Print #1,
rs.MoveNext
Loop
**
Close #1
End Sub
Wie muss der zwischen ** markierte Code aussehen, so dass die einzelnen Spaltenwerte durch ";" getrennt ausgegeben werden?
Vielen Dank für die Unterstützung.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6852255366
Url: https://administrator.de/forum/access-vba-skript-abfrageergebnis-im-csv-format-in-textdatei-schreiben-6852255366.html
Ausgedruckt am: 21.02.2025 um 12:02 Uhr
4 Kommentare
Neuester Kommentar

Machs doch gleich mit der dafür vorgesehenen Methode mit einer Querydef...
https://stackoverflow.com/questions/21205627/how-to-export-a-temporary-r ...
Wenn die CSV bestimmt Eigenschaften haben soll (z.B. Delimiter) kann man eine eigene Export-Defintion vorher anlegen und dann der Funktion "TransferText" als zweiten Parameter übergeben.
DoCmd.TransferText-Methode (Access)
Wenn du unbedingt bei deinem Skript bleiben willst
Cheers briggs
https://stackoverflow.com/questions/21205627/how-to-export-a-temporary-r ...
MyValue1 = InputBox(Message, Title, Default)
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"
fileName = "c:\Users\slro\Warenkorb.txt"
Set qdfTemp = CurrentDb.CreateQueryDef("zzzTemp", queryName)
Set qdfTemp = Nothing
DoCmd.TransferText acExportDelim, , "zzzTemp", fileName, True
DoCmd.DeleteObject acQuery, "zzzTemp"
DoCmd.TransferText-Methode (Access)
Wenn du unbedingt bei deinem Skript bleiben willst
Private Sub Warenkorb_Datei_Click() ' Warenkorb.txt Datei mit Zeichnungen einer Anfrage erstellen
Dim fileName As String
Dim rs As Recordset
Dim db As Database
Dim queryName As String
Dim f As Field
Dim MyValue1 As String
Dim line as String
dim fso as Object
dim file as Object
Dim Message, Title, Default, MyValue
Message = "Bitte Bestellnummer eingeben:" ' Set prompt
Title = "InputBox" ' Set title.
Default = "" ' Set default
MyValue1 = InputBox(Message, Title, Default)
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "'"
fileName = "c:\Users\slro\Warenkorb.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(fileName, 2, True, -2)
Set db = CurrentDb
Set rs = db.OpenRecordset(queryName)
rs.MoveFirst
While Not rs.EOF
line = ""
For Each f In rs.Fields
line = line & f.Value & ";"
Next
file.WriteLine Left(line, Len(line) - 1)
rs.MoveNext
Wend
file.Close
End Sub
Cheers briggs

Vor dem Durchlauf der Schleife das Recordset sortieren. Entweder direkt in deiner SQL Clause mit ORDER BY SPALTENNAME
oder mittels Sort Property des Recordset
https://learn.microsoft.com/de-de/office/client-developer/access/desktop ...
Cheers
queryName = "SELECT dbo_BESTELLUNGPOS.BESTELLUNG, dbo_BESTELLUNGPOS.POSITION, dbo_BESTELLUNGPOS.ARTIKEL, dbo_BESTELLUNGPOS.MENGE, dbo_BESTELLUNGPOS.EKME, dbo_ARTIKEL.NAME, dbo_ARTIKEL.MI_HERSTELLER, dbo_ARTIKEL.MI_HERSTELLERNUMMER FROM dbo_BESTELLUNGPOS LEFT JOIN dbo_ARTIKEL ON dbo_BESTELLUNGPOS.ARTIKEL = dbo_ARTIKEL.ARTIKEL WHERE dbo_BESTELLUNGPOS.BESTELLUNG Like '" & MyValue1 & "' ORDER BY BESTELLUNGPOS.USERPOS"
oder mittels Sort Property des Recordset
https://learn.microsoft.com/de-de/office/client-developer/access/desktop ...
Cheers