Jemand verlangt von Ihnen eine #.csv-Datei in #UTF-8 ohne #BOM? Spricht der Suaheli? Nein – das ist ein legitimes Anliegen … (Comma Separated Values in der Datei, in der Zeichencodierung UTF-8, und ohne Signatur). Und wie lösen wir das?
Nicht ohne #VBA – leider. Es gibt beim DATEI > Speichern Unter > Tools > Weboptionen keine UTF-8 ohne BOM –Codierung. Der Ansatz ist zunächst derselbe wie vorgestern beschrieben – Sie erzeugen ein Hilfstabellenblatt, das die Daten exportfertig in einer Spalte beinhaltet, die Trennzeichen und Hochkommata müssen Sie selbst hineinbasteln.
Den Export erledigt jetzt keine Excel-Funktionalität, sondern ein Codeschnipsel:
Sub Export2CSVUTF8ohneBOM() Dim cSh As Worksheet Dim myRow As Long Dim UTFStream As Object Dim BinaryStream As Object Set cSh = ThisWorkbook.Worksheets("Export CSV") On Error GoTo myFault Set UTFStream = CreateObject("adodb.stream") 'Die Ausgabe erfolgt mit ADODb Stream UTFStream.Type = adTypeText UTFStream.Mode = adModeReadWrite UTFStream.Charset = "UTF-8" 'hier wird die Codierung vorgegeben UTFStream.LineSeparator = adLF UTFStream.Open For myRow = 1 To csh.Range("A1").End(xlDown).Row If Not IsEmpty(dSh.Range(SelCol & myRow)) Then UTFStream.WriteText (cSh.Cells(myRow, 1)), adWriteLine End If Next myRow 'Ergebnis ist jetzt UTF-8 mit BOM - es gibt keine Einstellung für "ohne BOM", daher kommt jetzt der ultimative Trick 'wir erstellen einen zweiten stream Set BinaryStream = CreateObject("adodb.stream") BinaryStream.Type = adTypeBinary BinaryStream.Mode = adModeReadWrite BinaryStream.Open UTFStream.Position = 3 'überspringen BOM (die ersten 3 Zeichen) UTFStream.CopyTo BinaryStream 'jetzt wird der ursprünglich erzeugte Stream kopiert, aber BOM fällt weg 'den ersten Stream braucht jetzt kein Mensch mehr UTFStream.Flush UTFStream.Close 'Ergebnis speichern BinaryStream.SaveToFile ThisWorkbook.Path & "\Datei_" & Format(Now, "yyyymmdd_hhnnss") & ".csv", adSaveCreateOverWrite 'Speichern unter dem hier erzeugten Dateinamen BinaryStream.Flush BinaryStream.Close Set UTFStream = Nothing Set BinaryStream = Nothing MsgBox "Export finished to file " & ThisWorkbook.Path & "\Events_" & Format(Now, "yyyymmdd_hhnnss") & ".csv", vbOKOnly, "Export" Set cSh = Nothing Exit Sub myFault: MsgBox Err.Number & "-" & Err.Description & vbCrLf & " when exporting row #" & myRow & "." & vbCrLf _ & "Please correct data and try again.", vbOKOnly, "Error" Resume Next End Sub
Die Microsoft ActiveX DataObjects Library muss in den Extras > Verweisen vorhanden sein, sonst wird das nichts.
Ob das wirklich richtig arbeitet sehen Sie, wenn Sie sich das Ergebnis z.B. mit Notepad++ anschauen:

Ich geb’s zu, das ist keine alltägliche Anforderung. Aber auch keine völlig abwegige – Tools, die Daten importieren, haben immer zwei Möglichkeiten: sie sind sehr komplex und können mit allen möglichen Formaten gut umgehen (dann sind sie teuer), oder sie geben genau vor, womit sie arbeiten wollen und können, und reagieren pikiert, wenn der Input auch nur ein bisschen anders ist als erwartet (dann sind sie weitaus kostengünstiger, und im Fall des Falles haben Sie ein bisschen Extraaufwand).
Woche beendet – angenehme Ruhetage 🙂
Leider bekomme ich bei der Zeile
„Set cSh = ThisWorkbook.Worksheets(„Export CSV“)“
immer die Fehlermeldung „ThisWorkbook.Worksheets(„Export CSV“)“=
Gefällt mirGefällt mir
Wie heißt denn das Arbeitsblatt, das exportiert werden muss? Der String -Export CSV- muss mit dem Namen des Blattes ersetzt werden.
Lg
Katharina
Gefällt mirGefällt mir