Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Deutsche Umlaute

Deutsche Umlaute
06.01.2022 09:49:11
Gert
Ich habe eine Excel-VBA-Anwendung für eine Bekannte entwickelt, die sich in Brasilien aufhält. In VBA machen beim Kommando MsgBox die deutschen Umlaute Probleme. Die Messagebox "Änderung ausgeführt" wird bei mir (Version 16.0) und auch in Brasilien (Excel für Mac Version 16.56) noch richtig dargestellt. Aber wenn die Datei für weitere Anpasungen zurück kommt, haben alle Umlaute einen falschen Keycode. In erster Instanz habe ich die Umlaute im Sinne von Ä => Ae ... ersetzt. Wohler wäre es mir, wenn die Umlaute genau so zurück kämen, wie sie hinaus gegangen sind.
Die folgende auf das Wesentliche beschränkte Prozedur zeigt die Veränderung. Aus "ÄÖÜäöüß" wird "€…†ŠšŸ§". Es ist unklar, wann genau zwischen Brasilien und Deutschland und warum die Veränderung vor sich geht und welcher Codepage die falsche Codierung entspricht. Helfen würde mir u.a. eine Info, wie ich die zu den falschen Zeichen gehörige Codepage ermitteln kann. Und natürlich wie ich in VBA global eine richtige Codierung für beliebige Zeichenketten-Variablen erzeugen kann.

Sub UmlConv()
Dim Umlaute As String
Dim Ergebnis As String
Dim i As Long
Dim x() As Byte
Debug.Print "Deutsche Umlaute"
Umlaute = "ÄÖÜäöüß"
Ergebnis = ""
x = StrConv(Umlaute, vbFromUnicode)    ' Convert string.
For i = 0 To UBound(x)
Debug.Print x(i)
Ergebnis = Ergebnis & Chr(x(i))
Next
Debug.Print Ergebnis    'Ergibt wieder ÄÖÜäöüß
Debug.Print ""
Debug.Print "Umlaute mit geänderten Keycodes"
Umlaute = "€…†ŠšŸ§"
Ergebnis = ""
x = StrConv(Umlaute, vbFromUnicode)    ' Convert string.
For i = 0 To UBound(x)
Debug.Print x(i)
Ergebnis = Ergebnis & Chr(x(i))
Next
Debug.Print Ergebnis    'Ergibt wieder €…†ŠšŸ§
End Sub
Diese ergibt folgendes Debug-Protokoll:
Deutsche Umlaute
196
214
220
228
246
252
223
ÄÖÜäöüß
Geänderte Keycodes
128
133
134
138
154
159
167
€…†ŠšŸ§


Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Deutsche Umlaute
06.01.2022 11:01:47
Gert
Nochmal der Fragesteller:
Nach einer längeren Recherche habe ich eine wichtige Spur zu Codepages gefunden. Die der Veränderung der Umlaute zugrunde liegende Codepage scheint 'MacRoman' zu sein. Dort finden sich alle 7 Sonderzeichen unter dem entsprechenden Code. 'MacRoman' ist relativ universell für die Darstellung der Sonderzeichen westeurop. Sprachen. Aber wann, wo und warum kommt die Codepage ins Spiel? Denn unter Windows wird die 850 angezeigt. Und unter Google habe ich keine Referenz gefunden, aus der ein Zusammenhang zwischen VBA und 'MacRoman' hervorgeht.
Anzeige
AW: Deutsche Umlaute
06.01.2022 18:03:10
Piet
Hallo
Landesspezifische Sonderzeichen ist so ein Problem, Arbeite ich auf einem türkischen PC hat der keine deutschen Umlaute, und der deutsche PC keine türkischen Sonderzeichen. Abhilfe: man tauscht die Buchstaben im Text einfach aus. Besonders leicht bei Texten die in einer Excel Datei sind. Unten ein Beispiel. Tippe ich hinter c,s,i,g, einen Punkt werden diese Buchstaben in türkische Sonderzeichen konvertiert. Genauso kann man ae, oe, ue in deutsche Umlaute konvertieren.
Den Code für die Sonderzeichen fand ich heraus mit dem Befehl: - MsgBox AscW(ActiveCell) wo kopierte Sonderzeichen drinstanden.
mfg Piet
  • 
    Sub Buchstaben_tauschen_Punkt()
    With Cells
    .Replace "g.", ChrW(287), xlPart, , MatchCase = False
    .Replace "c.", ChrW(231), xlPart, , MatchCase = False  '231
    .Replace "s.", ChrW(351), xlPart, , MatchCase = False
    .Replace "i.", ChrW(305), xlPart, , MatchCase = False
    .Replace "C.", ChrW(199), xlPart, , MatchCase = False  '199
    .Replace "I.", ChrW(304), xlPart, , MatchCase = False
    .Replace "S.", ChrW(350), xlPart, , MatchCase = False
    .Replace "G.", ChrW(286), xlPart, , MatchCase = False
    End With
    End Sub
    

  • Anzeige
    AW: Deutsche Umlaute
    06.01.2022 18:14:00
    Gert
    Danke für Deinen Beitrag, Piet. So eine Austausch-Routine habe ich auch schon angedacht. Aber ich hatte gehofft, dass es irgendwo eine Einstellung gibt, die Codepage festlegt.
    Abgesehen mal davon, ...
    06.01.2022 21:03:29
    Luc:-?
    …Gert,
    könntest du es ja auch mal mit dem Ersatz der (dt) UmlautBuchstaben durch UnicodeZeichenKombis aus einfachem Vokal und kombinierendem diakritischen Zeichen versuchen → statt ae für ä dann a und Trema (¨). Als Fml sähe seine Erzeugung so aus: =UNIZEICHEN(97)&UNIZEICHEN(776)
    In einer BspFml so: =WECHSELN("Bäder";"ä";UNIZEICHEN(97)&UNIZEICHEN(776))
    In VBA müsste für die 1.Fml dann das geschrieben wdn: ChrW(97)&ChrW(776)
    Für SonderBuchstaben wie großes (ẞ) und kleines ß ist das allerdings nicht möglich. Hier muss auf Ersatz durch ss/Ss/SS (offiziell) bzw sz/Sz/SZ (inoffiziell) ausgewichen wdn.
    Gruß, Luc :-?
    „Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
    Anzeige
    AW: Abgesehen mal davon, ...
    07.01.2022 10:03:18
    Gert
    Danke auch Dir Luc. Ich suche keine Prozedur oder Funktion, die das eine Zeichen durch das andere ersetzt, sondern eine Methode, die beim Speichern einer Excel-VBA-Datei auf dem Zielrechner die gleiche Codepage anwendet wie die, mit der ich die Datei erzeugt habe, d.h. '850'. Nachdem ich die Codepage identifiziert habe, mit der die Umlaute "umgeschrieben" wurden, und diese ausgerechnet den Namen ''MacRoman' hat, liegt es ja auf der Hand, dass das etwas mit dem Produkt "Microsoft Excel für Mac" auf fdem Zielrechner zu tun hat. Frage: Kann ich die Codepage auf dem Zielrechner vorübergehend zu '850' ändern. Und kann man das evtl. innerhalb VBA und nur für VBA erzwingen. Dann würden 2 Systeme mit der gleichen Sprache kommunizieren.
    Anzeige
    Meine AW war dafür gedacht, ...
    07.01.2022 10:28:08
    Luc:-?
    …Gert,
    zu versuchen, ob das auch ohne CodePage-Änderung fktioniert, falls sie unicode-kompatibel ist. Denn Unicode sollte dann immer das gleiche Ergebnis liefern.
    Luc :-?
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    Deutsche Umlaute in Excel und VBA korrekt darstellen


    Schritt-für-Schritt-Anleitung

    1. Umlaute in VBA korrekt darstellen: Um deutsche Umlaute in einer VBA-Anwendung korrekt darzustellen, kannst du die folgende Prozedur verwenden:

      Sub UmlConv()
         Dim Umlaute As String
         Dim Ergebnis As String
         Dim i As Long
         Dim x() As Byte
         Umlaute = "ÄÖÜäöüß"
         Ergebnis = ""
         x = StrConv(Umlaute, vbFromUnicode)    ' Konvertiere den String.
         For i = 0 To UBound(x)
             Ergebnis = Ergebnis & Chr(x(i))
         Next
         Debug.Print Ergebnis    ' Gibt wieder ÄÖÜäöüß aus
      End Sub
    2. Codepage ermitteln: Um die Codepage, die für die falsche Darstellung der Umlaute verantwortlich ist, zu ermitteln, kannst du den folgenden Befehl in der Windows-Eingabeaufforderung verwenden:

      chcp

    Häufige Fehler und Lösungen

    • Problem: Excel Umlaute werden falsch dargestellt.

      • Lösung: Überprüfe die verwendete Codepage auf dem Zielrechner. In vielen Fällen liegt das Problem an der Verwendung von MacRoman unter Mac und OEM 850 unter Windows.
    • Problem: Umlaute in VBA werden nicht korrekt angezeigt.

      • Lösung: Stelle sicher, dass du die Umlaute in der richtigen Codepage codierst. Verwende StrConv um die Umlaute korrekt zu konvertieren.

    Alternative Methoden

    • Unicode-Ersatz: Du kannst Umlaute auch durch Unicode-Zeichen ersetzen. Zum Beispiel:

      =UNIZEICHEN(97)&UNIZEICHEN(776)   ' Für ä
    • Austausch-Routine in Excel: Erstelle eine Routine, um deutsche Umlaute durch andere Zeichen zu ersetzen, wenn du auf einem System ohne die entsprechenden Umlaute arbeitest:

      Sub Buchstaben_tauschen_Punkt()
        With Cells
            .Replace "g.", ChrW(287), xlPart, , MatchCase = False
            .Replace "c.", ChrW(231), xlPart, , MatchCase = False
            ' Weitere Ersetzungen hier...
        End With
      End Sub

    Praktische Beispiele

    Hier sind einige praktische Beispiele zur Umwandlung und Korrektur von Umlaute in Excel:

    1. Buchstaben ersetzen: Ersetze Buchstaben in einer Zelle mit Umlaute:

      Cells(1, 1).Value = Replace(Cells(1, 1).Value, "ae", "ä")
    2. Direktes Ersetzen in Excel:

      Sub ErsetzeUmlaute()
         Cells.Replace What:="ae", Replacement:="ä", LookAt:=xlPart
         Cells.Replace What:="oe", Replacement:="ö", LookAt:=xlPart
         Cells.Replace What:="ue", Replacement:="ü", LookAt:=xlPart
      End Sub

    Tipps für Profis

    • VBA Umlaute ersetzen: Nutze ChrW um Umlaute direkt in VBA zu ersetzen, das gibt dir mehr Kontrolle über die Darstellung.

    • Fehlerdiagnose: Wenn Excel Umlaute falsch darstellt, prüfe die Datei auf unsichtbare Zeichen oder Zeilenumbrüche, die die Codierung beeinflussen könnten.

    • Codepage-Management: Wenn du häufig zwischen verschiedenen Systemen wechselst, dokumentiere die verwendeten Codepages, um schnell Anpassungen vornehmen zu können.


    FAQ: Häufige Fragen

    1. Wie kann ich die falschen Umlaute in Excel korrigieren? Du kannst die Umlaute korrigieren, indem du eine Ersetzungsroutine in VBA schreibst, die falsche Zeichen durch die korrekten Umlaute ersetzt.

    2. Welche Codepage ist für deutsche Umlaute verantwortlich? Die häufigste Codepage für deutsche Umlaute unter Windows ist OEM 850, während unter Mac oft MacRoman verwendet wird.

    3. Wie kann ich die Codierung beim Speichern einer Datei festlegen? In VBA gibt es keine direkte Möglichkeit, die Codepage beim Speichern festzulegen. Du musst sicherstellen, dass die Codierung beim Erstellen der Datei korrekt ist.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige