Suche…


Einführung

VBA kann mit Unicode Zeichenfolgen in jeder Sprache und jedem Skript lesen und schreiben. Es gibt jedoch strengere Regeln für Identifier-Token .

Nicht-lateinischer Text im VBA-Code

In der Tabellenzelle A1 haben wir das folgende arabische Pangram:

ف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت - يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ

VBA bietet die Funktionen AscW und ChrW , um mit Multi-Byte-Zeichencodes zu arbeiten. Wir können Byte Arrays auch verwenden, um die String-Variable direkt zu bearbeiten:

Sub NonLatinStrings()

Dim rng As Range
Set rng = Range("A1")
Do Until rng = ""
    Dim MyString As String
    MyString = rng.Value
    
    ' AscW functions
    Dim char As String
    char = AscW(Left(MyString, 1))
    Debug.Print "First char (ChrW): " & char
    Debug.Print "First char (binary): " & BinaryFormat(char, 12)
    
    ' ChrW functions
    Dim uString As String
    uString = ChrW(char)
    Debug.Print "String value (text): " & uString        ' Fails! Appears as '?'
    Debug.Print "String value (AscW): " & AscW(uString)
    
    ' Using a Byte string
    Dim StringAsByt() As Byte
    StringAsByt = MyString
    Dim i As Long
    For i = 0 To 1 Step 2
        Debug.Print "Byte values (in decimal): " & _
            StringAsByt(i) & "|" & StringAsByt(i + 1)
        Debug.Print "Byte values (binary): " & _
            BinaryFormat(StringAsByt(i)) & "|" & BinaryFormat(StringAsByt(i + 1))
    Next i
    Debug.Print ""

    ' Printing the entire string to the immediate window fails (all '?'s)
    Debug.Print "Whole String" & vbNewLine & rng.Value
    Set rng = rng.Offset(1)
Loop

End Sub

Dies erzeugt die folgende Ausgabe für den arabischen Buchstaben Sad :

Erstes Zeichen (ChrW): 1589
Erstes Zeichen (binär): 00011000110101
Zeichenfolgewert (Text):?
Stringwert (AscW): 1589
Byte-Werte (dezimal): 53 | 6
Byte-Werte (binär): 00110101 | 00000110

Ganze Zeichenfolge
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Beachten Sie, dass VBA nicht-lateinischen Text nicht in das unmittelbare Fenster drucken kann, obwohl die Zeichenfolgenfunktionen ordnungsgemäß funktionieren. Dies ist eine Einschränkung der IDE und nicht der Sprache.

Nicht-lateinische Bezeichner und Sprachabdeckung

VBA-Bezeichner (Variablen- und Funktionsnamen) können das lateinische Skript und möglicherweise auch japanische , koreanische , vereinfachtes Chinesisch und traditionelles Chinesisch verwenden .

Das erweiterte lateinische Skript deckt viele Sprachen ab:
Englisch, Französisch, Spanisch, Deutsch, Italienisch, Bretonisch, Katalanisch, Dänisch, Estnisch, Finnisch, Isländisch, Indonesisch, Irisch, Lojban, Mapudungun, Norwegisch, Portugiesisch, Schottisches Gälisch, Schwedisch, Tagalog

Einige Sprachen sind nur teilweise abgedeckt:
Azeri, Kroatisch, Tschechisch, Esperanto, Ungarisch, Lettisch, Litauisch, Polnisch, Rumänisch, Serbisch, Slowakisch, Slowenisch, Türkisch, Yoruba, Walisisch

Einige Sprachen haben wenig oder keine Abdeckung:
Arabisch, Bulgarisch, Cherokee, Dzongkha, Griechisch, Hindi, Mazedonisch, Malayalam, Mongolisch, Russisch, Sanskrit, Thailändisch, Tibetisch, Urdu, Uiguren

Die folgenden Variablendeklarationen sind alle gültig:

Dim Yec’hed As String 'Breton
Dim «Dóna» As String 'Catalan
Dim fræk As String 'Danish
Dim tšellomängija As String 'Estonian
Dim Törkylempijävongahdus As String 'Finnish
Dim j’examine As String 'French
Dim Paß As String 'German
Dim þjófum As String 'Icelandic
Dim hÓighe As String 'Irish
Dim sofybakni As String 'Lojban (.o’i does not work)
Dim ñizol As String 'Mapudungun
Dim Vår As String 'Norwegian
Dim «brações» As String 'Portuguese
Dim d’fhàg As String 'Scottish Gaelic

Beachten Sie, dass in der VBA-IDE ein einzelner Apostroph innerhalb eines Variablennamens die Zeile nicht in einen Kommentar umwandelt (wie bei Stack Overflow).

Sprachen, die zwei Anführungszeichen verwenden, um ein Zitat zu kennzeichnen, dürfen auch in Variablennamen verwendet werden, ohne dass die Anführungszeichen "" verwendet werden.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow