VBA: *.csv mit Semikolon als Trennzeichen
Wenn Sie eine Datei ganz normal von Excel aus als *.csv speichern, dann wird automatisch das landesspezifische Trennzeichen für die einzelnen Spalten verwendet. Das ist hier in Deutschhand das Semikolon. Wenn Sie aber solch einen Export per VBA, also per Makro ausführen wollen, dann wird es wirklich „csv” sein, also comma separated values. Beim Import werden diese Kommata aber nicht automatisch erkannt und es muss immer wieder ein zusätzlicher Schritt erfolgen, um das Trennzeichen Komma statt des Semikolons zu akzeptieren.
Da sollte das „Übel” gleich bei der Wurzel gepackt werden und bereits beim speichern der Daten ein Semikolon als Trenner verwendet werden. Verwenden Sie dazu den folgenden Code (hier in der*.zip als Text- und *.bas – Datei) für den Export. Beachten Sie bitte: Das Zielverzeichnis muss existieren, eine vorhandene *.csv-Datei mit dem gleichen Pfad und Namen wird ohne Rückfrage überschrieben!
Option Explicit Sub SaveAsCSV() Dim DstFileName As String, DstPfad As String Dim Delimiter As String Dim strZe As String Dim lRow As Long, lCol As Integer Dim Ze As Long, Sp As Integer Dim ff As Integer On Error GoTo ErrorHandler DstPfad = "C:\Daten\" 'Anpassen, muss bereits existieren DstFileName = DstPfad & "csv-Export.csv" 'Anpassen Delimiter = ";" With ActiveSheet lRow = .Cells.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row lCol = .Cells.Find(what:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column ff = FreeFile Open DstFileName For Output As #ff 'Zeile für Zeile lesen und schreiben ... For Ze = 1 To lRow For Sp = 1 To lCol - 1 strZe = strZe & .Cells(Ze, Sp) & Delimiter Next Sp strZe = strZe & .Cells(Ze, Sp) Print #ff, strZe strZe = "" Next Ze End With ErrorHandler: If Err.Number <> 0 Then MsgBox "Fehler Nr. " & Err.Number & vbCrLf _ & Err.Description, vbCritical + vbOKOnly, "Das ging schief ..." If ff > 0 Then Close #ff End Sub
Mit diesem Code wird der gesamte genutzte Bereich des Arbeitsblattes als *.csv exportiert. Sollen Texte in Anführungszeichen gesetzt werden, weil beispielsweise in dem Text auch das Trennzeichen (hier: Semikolon) vorkommen kann, dann muss der Code entsprechend ergänzt werden. Das Komma als Dezimaltrenner bleibt erhalten. Mit diesem Code haben Sie ein hohes Maß an Kontrolle beim Export.
Und jetzt, ganz zum Schluss und etwas verschämt eine weitere Methode, wie Sie mit sehr, sehr wenig Code eine beliebige Datei als *.csv mit den landesüblichen Trennzeichen für Spalten, Tausendergruppierung und auch Dezimalstellen speichern können:
ActiveSheet.SaveAs Filename:=csvName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
wobei csvName eine String-Variable mit den Namen der künftigen csv-Datei ist. Mehr dazu können Sie in der Microsoft-Hilfe zur SaveAs – Methode des WorkSheet-Objekts nachlesen. Vielleicht ist der eine oder andere Parameter für Sie interessant.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen …