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