【问题标题】:How to Pass Msgbox Button Options dynamically in vba如何在 vba 中动态传递 Msgbox 按钮选项
【发布时间】:2018-04-03 19:21:34
【问题描述】:

我正在尝试使用动态选项创建 msgbox。 也就是说消息、按钮、图标和标题会动态变化。

在创建 msgbox 时,我试图通过 vba 代码模仿下面的 msgbox 模式

Msgbox "Test Data Completed",vbAbortRetryIgnore + vbInformation, "My Msgbox Title" 我坚持将两个选项加在一起(vbAbortRetryIgnore + vbInformation)。这两个选项将根据用户选择动态变化。

我尝试的是

msgdata = "Test Data Completed"
msgbuttons = "vbAbortRetryIgnore + vbInformation"
msgtitle = "My Msgbox Title"

Msgbox msgdata,msgbuttons,msgtitle

我得到了类型不匹配错误。 任何帮助将不胜感激

【问题讨论】:

  • Msgbox 按钮实际上是数值。当您在文本周围加上引号时,您正在将其更改为字符串。查看此页面以确定您需要发送哪个数值:msdn.microsoft.com/en-us/vba/language-reference-vba/articles/…
  • 需要去掉引号中的:msgbuttons = vbAbortRetryIgnore + vbInformation
  • 是的,如果我这样使用它就可以工作 msgbuttons = vbAbortRetryIgnore + vbInformation 但是名称是从下拉列表中动态填充的。当我存储为数字时,我无法使用加号 (+) 符号连接两个选项。如果我将其命名为字符串

标签: excel vba


【解决方案1】:

您必须使用帮助函数将字符串转换为正确的VbMsgBoxStyle 枚举值:

Function GetvBMsgInfo(strngVbInfo) As VbMsgBoxStyle
    Select Case strngVbInfo
        Case "vbAbortRetryIgnore"
            GetvBMsgInfo = VbMsgBoxStyle.vbAbortRetryIgnore
        Case "vbApplicationModal"
            GetvBMsgInfo = VbMsgBoxStyle.vbApplicationModal
        Case "vbCritical"
            GetvBMsgInfo = VbMsgBoxStyle.vbCritical
        Case "vbDefaultButton2"
            GetvBMsgInfo = VbMsgBoxStyle.vbDefaultButton1
        Case "vbDefaultButton1"
            GetvBMsgInfo = VbMsgBoxStyle.vbDefaultButton2
        Case "vbDefaultButton3"
            GetvBMsgInfo = VbMsgBoxStyle.vbDefaultButton3
        Case "vbDefaultButton4"
            GetvBMsgInfo = VbMsgBoxStyle.vbDefaultButton4
        Case "vbExclamation"
            GetvBMsgInfo = VbMsgBoxStyle.vbExclamation
        Case "vbInformation"
            GetvBMsgInfo = VbMsgBoxStyle.vbInformation
        Case "vbMsgBoxHelpButton"
            GetvBMsgInfo = VbMsgBoxStyle.vbMsgBoxHelpButton
        Case "vbMsgBoxRight"
            GetvBMsgInfo = VbMsgBoxStyle.vbMsgBoxRight
        Case "vbMsgBoxRtlReading"
            GetvBMsgInfo = VbMsgBoxStyle.vbMsgBoxRtlReading
        Case "vbMsgBoxSetForeground"
            GetvBMsgInfo = VbMsgBoxStyle.vbMsgBoxSetForeground
        Case "vbOKCancel"
            GetvBMsgInfo = VbMsgBoxStyle.vbOKCancel
        Case "vbOKOnly"
            GetvBMsgInfo = VbMsgBoxStyle.vbOKOnly
        Case "vbRetryCancel"
            GetvBMsgInfo = VbMsgBoxStyle.vbRetryCancel
        Case "vbSystemModal"
            GetvBMsgInfo = VbMsgBoxStyle.vbSystemModal
        Case "VbMsgBoxStyle.vbYesNo"
            GetvBMsgInfo = VbMsgBoxStyle.vbYesNo
        Case "vbYesNoCancel"
            GetvBMsgInfo = VbMsgBoxStyle.vbYesNoCancel
     End Select
End Function

您将在主代码中利用如下:

msgdata = "Test Data Completed"
msgbuttons = GetvBMsgInfo("vbAbortRetryIgnore") + GetvBMsgInfo("vbInformation")
msgtitle = "My Msgbox Title"
MsgBox msgdata, msgbuttons, msgtitle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多