2012-08-27 64 views
1

我創建了一個簡單的excel工作表。Excel宏,用波斯文讀取單元格

這是我的宏代碼:

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

它的工作原理是正確的,如果小區1,1包含一個英文單詞或數字。

但是,當我把一些波斯/阿拉伯語文本放入單元格1,1(例如:سلام)並運行宏時,宏顯示????。 (它顯示一個?而不是每個波斯字符)

如何解決這個問題?

回答

4

你可以使用Windows API的消息框,而不是,它應該顯示多數編碼類型

例如,該進入一個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位長整數

+0

有關在64位系統上修改VBA中的API調用的信息,請訪問:http://msdn.microsoft.com/zh-cn/library/辦公室/ ee691831.aspx#odc_office2010_Compatibility32bit64bit_ApplicationProgrammingInterfaceC ompatibility – barrowc