我在VBA中有一个包含Unicode字符的字符串。
我想在包含该字符串的消息框中显示该字符串。
但是,消息框仅包含一个问号,而不是字符串。
MCVE:
Dim s As String
s = ChrW(5123)
MsgBox s
答案 0 :(得分:6)
MsgBox
与非ANSI Unicode字符不兼容。
但是,我们可以使用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
答案 1 :(得分:1)
另一个选择可能是我的ModernBox:
MsgMox ChrW(5125) & ChrW(5123) & ChrW(5121) & ChrW(5130), vbInformation, "Unicode"
显示: