Excelmacros,用波斯语文本读取单元格

我创build了一个简单的Excel工作表。

这是我的macros代码:

Sub MyMacro() Sheets("Sheet1").Select A$ = Cells(1, 1) MsgBox (A$) End Sub 

它工作正确,如果单元格1,1包含一个英文单词或数字。

但是,当我把一些波斯/阿拉伯语文本到单元格1,1(例如: سلام )并运行macros,macros显示???? 。 (它显示了一个而不是每个波斯人的性格)

如何解决这个问题呢?

您可以使用Windows API消息框,而应该显示大多数的编码types

例如,这进入了一个MODULE

 Option Explicit #If Win64 Then Private Declare PtrSafe Function User32MsgBox Lib "user32" Alias "MessageBoxW" _ (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _ Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long #Else Private Declare Function User32MsgBox Lib "user32" Alias "MessageBoxW" _ (Optional ByVal hWnd As Long, Optional ByVal Prompt As Long, _ Optional ByVal Title As Long, Optional ByVal Buttons As Long) As Long #End If Public Function MessageBoxW(cPrompt As String, _ Optional cButtons As VbMsgBoxStyle = vbOKOnly, _ Optional cTitle As String) As Long MessageBoxW = User32MsgBox(0, StrPtr(cPrompt), StrPtr(cTitle), cButtons) '*****Probably need to convert StrPtr to 32bit long on 64bit - see next line 'MessageBoxW = User32MsgBox(0, cLng(StrPtr(cPrompt)), CLng(StrPtr(cTitle)), cButtons) End Function Sub MyMacro() Dim txt As String txt = Sheets("Sheet1").Cells(1, 1).Value MessageBoxW (txt) End Sub 

目前我还没有一个64位的机器,所以你可能需要在64位机器上将StrPtr转换为32位长