59276


áのような特殊文字をメッセージボックス上に表示させようとしたいのですが、下記の様にするとアキュートアクセントが消えたただのaとなります。

[code]

    MsgBox ChrW(&HE1)
    
[/code]

これを表示させるにはどのようにすればよろしいでしょうか、ご教示ください。

補足情報：  
・Windows10 Pro バージョン1803  
・Excel 2013  
・Microsoft Visual Basic for Applications 7.1  
・エクセルのセルに出力させる場合は正しくáが表示されます  
・文字が潰れて見えないのかと思いMsgBox ChrW(&HE6)でæを表示させようとしてもaになります


CC BY-SA 4.0
2019-09-26T00:44:23.010
59275
2019-09-26T03:52:49.777
2019-09-26T00:51:03.120
32986
35965
question
excel vba
メッセージボックスに環境依存文字を表示させたい


これは翻訳した回答。

> 最後に私は解決策を見つけた..それは簡単なので、誰かがここでこれを必要とするなら、それは>>>
>
>   1. コントロールパネル>地域と言語のオプション>詳細タブ 非ユニコードプログラムの言語で使用するネイティブ言語を選択する
>
>   2. VBAエディターで、言語をサポートするツール>オプション>エディター形式>フォントを選択します
>
>

>
> そしてそれはうまく動作します

原文参照：  
[How to make vba to read and understand characters in other keyboard
language](http://social.msdn.microsoft.com/Forums/en-
US/isvvba/thread/78eeab51-f39e-423c-8afc-ebd218d658c3)


CC BY-SA 4.0
2019-09-26T01:07:41.777
59276
2019-09-26T01:16:28.800
2019-09-26T01:16:28.800
3060
35385
59275
answer


VBAはUnicode化されていますが、外部API呼び出しの際には互換のために従来通りANSIバージョン（日本語環境においてはShift_JIS）が使われています。そのためShift_JISに存在しない文字は使用できません。

「非ユニコードプログラムの言語」の設定を変更する回答も挙げられていますが、全てのプログラムに影響するため、ここを変更するのはお勧めできません。

メッセージボックスに環境依存文字を表示するためには、自前でUnicodeバージョンの[`MessageBoxW`関数](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-
messageboxw)を定義し、それを呼び出すことになります。またその際に`String`型をそのまま渡してしまうとANSI文字列に変換されてしまうため、`StrPtr`関数を使って文字列ポインターを取得することになります。

[code]

    Declare PtrSafe Function MessageBox Lib "user32.dll" Alias "MessageBoxW" (ByVal hWnd As LongPtr, ByVal lpText As LongPtr, ByVal lpCaption As LongPtr, ByVal uType As Long) As Long
    
    Sub Test()
        MessageBox 0, StrPtr(ChrW(&HE1)), StrPtr("Caption"), 0
    End Sub
    
[/code]


CC BY-SA 4.0
2019-09-26T03:52:49.777
59282
2019-09-26T03:52:49.777
4236
59275
answer