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 的限制,而不是語言。