VBA 代码中的非拉丁文本

在电子表格单元格 A1 中,我们有以下阿拉伯语 pangram:

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

VBA 提供 AscWChrW 函数来处理多字节字符代码。我们也可以使用 Byte 数组直接操作字符串变量:

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

这将为阿拉伯字母 Sad 产生以下输出 :

第一个字符(ChrW):1589
第一个字符(二进制):00011000110101
字符串值(文本) :?
字符串值(AscW):1589
字节值(十进制):53 | 6
字节值(二进制):00110101 | 00000110

整个字符串
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

请注意,即使字符串函数正常工作,VBA 也无法将非拉丁文本打印到即时窗口。这是 IDE 的限制,而不是语言。