CSV per VBA erzeugen
28.04.2020 21:24:42
Jubel
ich versuche gerade eine CSV-Datei aus VBA heraus zu erstellen und dabei direkt den Inhalt eines Tabellenblatts meiner Arbeitsmappe in diese CSV-Datei zu schreiben.
Hierzu habe ich zunächst gegoogelt und diesen Code gefunden:
Sub CSV_erzeugen()
Dim strDateiname As String, strPath As String
Dim i As Long, lngZeile As Long
strPath = "C:\Dateien_erstellen\CSV\" 'Speicherpfad eintragen
strDateiname = "txt_dateiname.csv" 'Dateinamen mit Dateiendung eintragen
lngZeile = Range("A" & Rows.Count).End(xlUp).Row
Open strPath & strDateiname For Output As #1
For i = 1 To lngZeile
Print #1, Cells(i, 1).Value & ";" & Cells(i, 2).Value & ";" & Cells(i, 3).Value
Next i
Close #1
End Sub
Der klappt soweit auch super, aber ich würde ihn gerne auch verstehen, damit ich ihn erweitern bzw. etwas ändern kann. Ich hoffe, ihr könnt mir dabei etwas helfen. Der obere Teil ist mir soweit klar, besonders elegant (aus meiner bescheidenen Warte heraus) fand ich, wie die letzte beschriebene Zeile (IngZeile) gefunden wird. Sowas habe ich Dussel bisher immer über eine For-Next-Schleife mit Abfrage auf "" gelöst. Insofern schon mal ein toller Lerneffekt ;)
Wenn es dann an das Output/Print/Close von #1 geht, bin ich etwas unsicher. Das Ergebnis des Codes ist, dass mein erstes Tabellenblatt der Mappe in die CSV geschrieben wird. Und zwar von der ersten beschrieben Zeile (in Spalte A) bis zur letzten (in Spalte A), wobei dann Spalten A bis C übertragen werden.
Ich frage mich nur, woher weiß VBA, dass ich das erste Tabellenblatt meiner Mappe als Kopiergrundlage haben möchte und nicht etwa irgendein anderes? Ist dafür das "#1" gedacht?
Wie könnte ich denn z.B. eine konkret benanntes Tabellenblatt in die neu erstellte CSV-Datei übertragen?