VBA: CSV-Export mit Semikolon

VBA: *.csv mit Semikolon als Trennzeichen

Wenn Sie eine Datei ganz nor­mal von Excel aus als *.csv spe­ich­ern, dann wird automa­tisch das lan­desspez­i­fis­che Trennze­ichen für die einzel­nen Spal­ten ver­wen­det. Das ist hier in Deutsch­hand das Semi­kolon. Wenn Sie aber solch einen Export per VBA, also per Makro aus­führen wollen, dann wird es wirk­lich „csv” sein, also comma separat­ed values. Beim Import wer­den diese Kom­ma­ta aber nicht automa­tisch erkan­nt und es muss immer wieder ein zusät­zlich­er Schritt erfol­gen, um das Trennze­ichen Kom­ma statt des Semi­kolons zu akzep­tieren.

Da sollte das „Übel” gle­ich bei der Wurzel gepackt wer­den und bere­its beim spe­ich­ern der Dat­en ein Semi­kolon als Tren­ner ver­wen­det wer­den. Ver­wen­den Sie dazu den fol­gen­den Code (hier in der*.zip als Text- und *.bas – Datei) für den Export. Beacht­en Sie bitte: Das Zielverze­ich­nis muss existieren, eine vorhan­dene *.csv-Datei mit dem gle­ichen Pfad und Namen wird ohne Rück­frage über­schrieben!

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 Bere­ich des Arbeits­blattes als *.csv exportiert. Sollen Texte in Anführungsze­ichen geset­zt wer­den, weil beispiel­sweise in dem Text auch das Trennze­ichen (hier: Semi­kolon) vorkom­men kann, dann muss der Code entsprechend ergänzt wer­den. Das Kom­ma als Dez­i­mal­tren­ner bleibt erhal­ten. Mit diesem Code haben Sie ein hohes Maß an Kon­trolle beim Export.

Und jet­zt, ganz zum Schluss und etwas ver­schämt eine weit­ere Meth­ode, wie Sie mit sehr, sehr wenig Code eine beliebige Datei als *.csv mit den lan­desüblichen Trennze­ichen für Spal­ten, Tausender­grup­pierung und auch Dez­i­mal­stellen spe­ich­ern kön­nen:

ActiveSheet.SaveAs Filename:=csvName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True

wobei csv­Name eine String-Vari­able mit den Namen der kün­fti­gen csv-Datei ist. Mehr dazu kön­nen Sie in der Microsoft-Hil­fe zur SaveAs – Meth­ode des Work­Sheet-Objek­ts nach­le­sen. Vielle­icht ist der eine oder andere Para­me­ter für Sie inter­es­sant.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 2,00  freuen …

Dieser Beitrag wurde unter Code-Schnipsel, Downloads, Fehlerbehandlung, Verschiedenes abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.