VBA 程式碼中的非拉丁文字
在電子表格單元格 A1 中,我們有以下阿拉伯語 pangram:
صفخلقخودكمثلالشمسإذبزغت - يحظىالضجيعبهانجلاءمعطار
VBA 提供 AscW
和 ChrW
函式來處理多位元組字元程式碼。我們也可以使用 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 的限制,而不是語言。