【问题标题】:MsgBox Yes/No Excel VBAMsgBox 是/否 Excel VBA
【发布时间】:2016-11-24 16:40:40
【问题描述】:

我的 VBA 脚本中有一个 Yes/No MsgBox,它返回一个问题供用户回答。每当按下“是”或“否”按钮时,除了运行其各自代码的脚本外,还会弹出另一个带有数字“6”或“7”的MsgBox。如何禁用第二个MsgBox

这是我的代码:

Dim question As Integer
question = MsgBox("Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you like to broaden your search and see all sources regarding " & country & "?", vbYesNo + vbQuestion, "Empty Sheet")

MsgBox question

If question = vbYes Then
    Sheets("Results").Range("D6").ClearContents
    Sheets("Results").Range("D7").ClearContents
    Category = Sheets("Results").Range("D6").Value
Else
    Sheets("Results").Range("D5").ClearContents
    Sheets("Results").Range("D6").ClearContents
    Sheets("Results").Range("D7").ClearContents
    Exit Sub
End If

【问题讨论】:

  • 好吧,你给MsgBox打了两次电话,不是吗?
  • 对不起,你什么意思?
  • 删除MsgBox question
  • question = "Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you like to broaden your search and see all sources regarding " & country & "?." 就足够了
  • 查找此类错误的一种方法是运行您的代码line by line。这是一项强大的技术,值得掌握。它将帮助您了解 VBA 的各个部分在做什么。

标签: vba excel msgbox


【解决方案1】:

MsgBox 函数返回一个vbMsgBoxResult 值,它是一个枚举(应该是一个Long 整数,而不是Integer)。

你调用了两次:

Dim question As Integer
question = MsgBox("Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you like to broaden your search and see all sources regarding " & country & "?", vbYesNo + vbQuestion, "Empty Sheet")

MsgBox question

一次分配question,一次显示question - 此时将包含vbYes (6) 或vbNo (7)。

我会声明 question As vbMsgBoxResult 以避免歧义,并在您以后使用它时获得自动完成/智能感知。实际上,resultanswer 会是更好的标识符 - “问题”听起来像问题本身,而不是用户的响应。

【讨论】:

    【解决方案2】:

    只需使用

    question = "Unfortunately, the Database has no sources regarding " & Category & " in " & country & ". Would you like to broaden your search and see all sources regarding " & country & "?."
    

    足够了。

    另外if函数可以

    If Msgbox(Question) = vbYes then 
        ...
    End If
    

    不要调用 MsgBox 两次

    【讨论】:

    • 是的。如果只使用一次,则实际上不需要为返回值设置一个变量。
    【解决方案3】:

    删除MsgBox question。这会不必要地创建一个填充有问题值的第二个消息框(6 或 7,取决于您选择的是还是否,例如 vbYes 的返回值是 6)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多