1

簡単なExcelワークシートを作成しました。

これは私のマクロコードです:

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

セル1,1に英語の単語または数字が含まれている場合は、正しく機能します。

しかし、ペルシア語/アラビア語のテキストをセル1,1(例:)に入れてسلامマクロを実行すると、マクロはを表示します????。(?各ペルシア文字の代わりに表示されます)

この問題を解決する方法は?

4

1 に答える 1

4

代わりにWindowsAPIメッセージボックスを使用できます。これにより、ほとんどのエンコーディングタイプが表示されます。

たとえば、これは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ビット長に変換する必要があるかもしれません。

于 2012-08-27T12:18:54.250 に答える