MsgBox
несовместимо с не-ANSI символами Юникода.
Однако мы можем отображать окна сообщений с функцией WinAPI MessageBoxW
, и это так.
Давайте объявим эту функцию, а затем создадим для нее оболочку, которая почти идентична функции VBA MsgBox
:
Private Declare PtrSafe Function MessageBoxW Lib "User32" (ByVal hWnd As LongPtr, ByVal lpText As LongPtr, ByVal lpCaption As LongPtr, ByVal uType As Long) As Long
Public Function MsgBoxW(Prompt As String, Optional Buttons As VbMsgBoxStyle = vbOKOnly, Optional Title As String = "Microsoft Access") As VbMsgBoxResult
Prompt = Prompt & VbNullChar 'Add null terminators
Title = Title & vbNullChar
MsgBoxW = MessageBoxW(Application.hWndAccessApp, StrPtr(Prompt), StrPtr(Title), Buttons)
End Function
Эта функция совместима только с Microsoft Access. Однако для Excel вы можете поменять Application.hWndAccessApp
на Application.hWnd
, чтобы он работал. Для других VBA-совместимых приложений вам нужно найти подходящий способ получить hWnd.
Вы можете использовать его как MsgBox
, если вы не используете функциональность контекстно-зависимой справки:
Dim s As String
s = ChrW(5123)
MsgBoxW s