代码之家  ›  专栏  ›  技术社区  ›  Erik A

如何在VBA中显示包含Unicode字符的消息框?

  •  4
  • Erik A  · 技术社区  · 5 年前

    我在vba中有一个包含unicode字符的字符串。

    我想在包含该字符串的消息框中显示该字符串。

    但是,消息框只包含一个问号,而不是字符串。

    MCVE:

    Dim s As String
    s = ChrW(5123)
    MsgBox s
    
    1 回复  |  直到 5 年前
        1
  •  6
  •   Erik A    5 年前

    MsgBox 与非ANSI Unicode字符不兼容。

    我们可以用winapi显示消息框 MessageBoxW 不过,功能就是这样。

    让我们声明那个函数,然后为它创建一个与vba几乎相同的包装器 消息框 功能:

    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的适当方法。

    你可以像这样使用它 消息框 ,只要不使用上下文相关的帮助功能:

    Dim s As String
    s = ChrW(5123)
    MsgBoxW s