Daten in Textdatei mit UTF-8 Kodierung speichern, ohne BOM (VBA)

UTF-8 geht nur mit ADOB.Stream

Vorgehen

Der Inhalt wird in das Object oStreamUtf geladen (inkl. BOM) danach wird der Zeiger im Object auf Position 3 gesetzt (BOM sind die ersten drei Zeichen) und der Inhalt bis zum Ende gewählt, in das Object oStreamBinary kopiert und als Dokument (Dateityp – txt, csv, … – wird per Variable vDataType definiert) gespeichert. Fertig.

Private Function SaveTxtFileUtf8(vFile As String, vDataType As String, vContent As String) As Boolean
    Dim oStreamUtf As Object
    Dim oStreamBinary As Object
   
On Error GoTo Errorhandler
    Set oStreamUtf = CreateObject("adodb.stream")
    oStreamUtf.Type = 2
    oStreamUtf.Charset = "UTF-8"
    oStreamUtf.Open
    oStreamUtf.WriteText vContent
    Set oStreamBinary = CreateObject("adodb.stream")
    oStreamBinary.Type = 1
    oStreamBinary.Open
    oStreamUtf.Position = 3
    oStreamUtf.CopyTo oStreamBinary
    oStreamUtf.Flush
    oStreamUtf.Close
    oStreamBinary.SaveToFile vFile & "." & vDataType, 2
    oStreamBinary.Flush
    oStreamBinary.Close
    Set oStreamUtf = Nothing
    Set oStreamBinary = Nothing
    SaveTxtFileUtf8 = True
Done:
    Exit Function
Errorhandler:
    Set oStreamUtf = Nothing
    Set oStreamBinary = Nothing
    SaveTxtFileUtf8 = False
End Function