VBA und UTF-8: Umlaute korrekt drucken
Schritt-für-Schritt-Anleitung
Um Umlaute in einer XML-Datei mit VBA korrekt zu drucken, gehe folgendermaßen vor:
-
Erstelle ein neues Modul in deinem Excel VBA-Editor.
-
Füge den folgenden Code ein, um eine XML-Datei mit UTF-8-Encoding zu generieren:
Sub gen_030()
Dim i As Integer, Datei
Datei = FreeFile
Open "C:\Temp\030.xml" For Output As #Datei
Print #Datei, "?xml version=""1.0"" encoding=""utf-8""?>"
Print #Datei, "Document>"
Print #Datei, "Übertrag ""Öffentlich"" />"
Print #Datei, "Component Übertrag=""003_Binärwerte"" />"
Print #Datei, "Document/>"
Close #Datei
End Sub
-
Führe das Makro aus, um die Datei zu erstellen und überprüfe die Ausgabe auf korrekte Umlaute.
Häufige Fehler und Lösungen
Alternative Methoden
Eine alternative Methode zur Erstellung von UTF-8-kodierten Dateien in VBA ist die Verwendung des ADODB.Stream-Objekts:
Sub CreateUTF8File()
Dim fsT As Object
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2 ' Stream-Typ: Text/String
fsT.Charset = "utf-8" ' Zeichensatz
fsT.Open ' Stream öffnen
Dim tmpStr As String
tmpStr = "Das ist äöü"
fsT.WriteText tmpStr ' Daten schreiben
fsT.SaveToFile "C:\Temp\UTF8_Test.txt", 2 ' Datei speichern
Set fsT = Nothing
End Sub
Praktische Beispiele
Hier ist ein einfaches Beispiel für die Verwendung von WideCharToMultiByte, um UTF-8 kodierte Dateien zu erstellen:
Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByVal lpUsedDefaultChar As Long) As Long
Sub UTF8Output(Filepath As String, text As String)
Dim tmp() As Byte, l As Long, FF As Integer
l = WideCharToMultiByte(65001, 0, StrPtr(text), Len(text), 0, 0, 0, 0)
ReDim tmp(0 To l - 1)
WideCharToMultiByte 65001, 0, StrPtr(text), Len(text), VarPtr(tmp(0)), l, 0, 0
FF = FreeFile
Open Filepath For Binary As #FF
Put #FF, , tmp
Close #FF
End Sub
Tipps für Profis
- Verwende immer
ADODB.Stream für die Verarbeitung von Textdateien mit UTF-8, um die besten Ergebnisse zu erzielen.
- Achte darauf, die Datei im Binärmodus zu öffnen, wenn du mit
WideCharToMultiByte arbeitest, um die korrekten Bytes zu schreiben.
- Halte deinen Code modular, um die Wiederverwendbarkeit zu erhöhen und die Wartung zu erleichtern.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass meine Datei die richtige Kodierung hat?
Überprüfe nach dem Speichern, ob die Datei in einem Texteditor mit UTF-8-Unterstützung korrekt angezeigt wird.
2. Was ist der Unterschied zwischen WriteText und WriteLine?
WriteText schreibt den Text ohne Zeilenumbruch, während WriteLine einen Zeilenumbruch am Ende hinzufügt. Achte darauf, die passende Methode für deinen Anwendungsfall zu wählen.
3. Kann ich die ADODB.Stream-Methode für mehrere Module verwenden?
Ja, du kannst das ADODB.Stream-Objekt in verschiedenen Subroutinen verwenden, achte jedoch darauf, dass du die Instanz korrekt übergibst, wenn du mehrere Module hast.