Viele Access-Anwendungen arbeiten mit langen Texten: Notizen, Beschreibungen, HTML-Fragmente, E-Mails, Protokolle oder XML-Daten. DafĂŒr gibt es in Microsoft Access das sogenannte Memo-Feld (heiĂt ab Access 2013 offiziell „Long Text“). Dieses Feld kann bis zu 1 GB Text speichern – also weit mehr als die 255 Zeichen eines klassischen Textfelds.
Allerdings gibt es Fallstricke:
- Probleme mit Sonderzeichen (z. B. Emojis, Arabisch, Chinesisch, kyrillisch)
- VerstĂŒmmelte Inhalte beim Speichern ĂŒber DAO/ADO
- Unerwartete Abschneidungen bei Abfragen
- EinschrÀnkungen beim Export oder bei
Debug.Print
Die Ursache: VBA ist nativ ANSI-basiert (8-Bit-Zeichen), wÀhrend Access intern Unicode (UTF-16) nutzt. Wenn man lange Texte falsch behandelt, gehen Sonderzeichen verloren oder Inhalte werden abgeschnitten.
Unicode und VBA: Ein kurzer Ăberblick
VBA verwendet intern den String
-Datentyp, der Unicode-fÀhig ist. Jeder String
speichert Zeichen als 16-Bit-Werte, also als UTF-16. Solange Du mit String
arbeitest, ist Unicode kein Problem – aber:
- Viele Office-Komponenten (z. B. DAO, Textboxen, Clipboard) nutzen nur ANSI
- Beim Export, Schreiben in Dateien oder Anzeige in Formularen gehen Unicode-Zeichen verloren, wenn Du nicht aufpasst
- Einige APIs brauchen explizit UTF-8 oder UTF-16 Encodings
Beispiel 1: Unicode sicher in Long Text speichern und lesen
Public Sub SpeichereUnicodeNachricht()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim UnicodeText As String
UnicodeText = "Hallo đ - Ù
۱Űۚۧ ۚۧÙŰčۧÙÙ
- ĐŃĐžĐČĐ”Ń ĐŒĐžŃ - äžææžŹè©Š"
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl_Nachrichten", dbOpenDynaset)
rs.AddNew
rs!Titel = "Unicode-Test"
rs!Nachricht = UnicodeText ' Feldtyp: Long Text
rs.Update
rs.Close
Set rs = Nothing
Set db = Nothing
MsgBox "Nachricht gespeichert: " & UnicodeText, vbInformation
End Sub
Wichtig: Achte darauf, dass das Feld Nachricht
in der Tabelle den Typ „Langer Text“ hat – kein Text(255), sonst wird es abgeschnitten.
Beispiel 2: Unicode aus Datei einlesen und speichern
Möchtest Du einen UTF-8- oder UTF-16-kodierten Text einlesen (z. B. XML, HTML, JSON), dann brauchst Du spezielle File-I/O-Routinen:
Public Function LeseUTF16Datei(Dateipfad As String) As String
Dim fso As Object
Dim stream As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = CreateObject("ADODB.Stream")
With stream
.Charset = "utf-16"
.Open
.LoadFromFile Dateipfad
LeseUTF16Datei = .ReadText
.Close
End With
Set stream = Nothing
Set fso = Nothing
End Function
Verwendung:
Dim inhalt As String
inhalt = LeseUTF16Datei("C:\Daten\test.txt")
Beispiel 3: Unicode korrekt exportieren (UTF-8)
Beim Schreiben in Dateien solltest Du nicht Open ... For Output
verwenden (ANSI), sondern ADODB.Stream oder CreateTextFile
mit Unicode-Encoding:
Public Sub SchreibeUTF8Datei(Dateipfad As String, Inhalt As String)
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
With stream
.Charset = "utf-8"
.Open
.WriteText Inhalt
.SaveToFile Dateipfad, 2 ' 2 = ĂŒberschreiben
.Close
End With
Set stream = Nothing
End Sub
So bleiben alle Unicode-Zeichen wie Emojis oder nicht-lateinische Buchstaben erhalten.
Formularanzeige: Emojis und Sonderzeichen korrekt anzeigen
Access-Formulare unterstĂŒtzen Unicode auch in Textfeldern. Achte darauf, dass die Steuerelementeigenschaft „Textformat“ auf „Rich Text“ oder „Nur Text“ steht – Rich Text kann aber zusĂ€tzliche HTML-Interpretationen mitbringen, was manchmal stört.
Wenn Du im Formular Texte einbindest, kannst Du einfach so schreiben:
Me.txtAnzeige.Value = "Letzter Status: â
erfolgreich ĂŒbermittelt"
Auch eine direkte Ausgabe aus der Tabelle klappt – solange der Feldtyp „Langer Text“ ist.
Sonderfall: SQL-Abfragen mit Long Text
In Access-Abfragen werden Long-Text-Felder standardmĂ€Ăig abgeschnitten, wenn sie Teil eines Gruppierungsvorgangs oder einer JOIN-Abfrage sind. Du kannst dieses Verhalten umgehen, indem Du:
- das Feld nicht gruppierst
- mit
Nz()
oderCStr()
in der SELECT-Klausel arbeitest - das Feld im VBA auswertest, nicht per SQL
Fazit
Unicode und lange Texte lassen sich in Access und VBA sehr gut verarbeiten – wenn Du die richtigen Techniken anwendest. Achte darauf:
String
ist Unicode-fÀhig, aber viele Office-Komponenten nicht- Nutze
ADODB.Stream
fĂŒr Dateioperationen mit Encoding - Verwende „Langer Text“-Felder fĂŒr Inhalte >255 Zeichen
- Teste mit realen Unicode-Zeichen – Emojis, arabischer Text, kyrillisch, CJK
Wenn Du mit mehrsprachigen Anwendungen, HTML-Inhalten, JSON oder Textverarbeitung in Access arbeitest, sind diese Techniken unverzichtbar.
Du brauchst UnterstĂŒtzung bei Unicode-Problemen, Textimport/-export oder einem mehrsprachigen Access-Frontend? Melde Dich gern bei mir – ich helfe Dir weiter.
đ DatenschĂ€fer – Analyse, Auswertung und Automatisierung fĂŒr KMU im Norden
đ§ Kontakt ĂŒber sesoft.de | đŹ Access · VBA · Unicode · Power Platform
Keine Antworten