2016-11-24 100 views
1

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

这里是我的代码:

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 
+3

好吧,你叫'MsgBox'两次,不是吗? – GSerg

+0

对不起,你的意思是? – franciscofcosta

+3

删除'MsgBox question' – Limak

回答

6

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 )。

enter image description here

我将宣布question As vbMsgBoxResult避免歧义,并提供自动/智能感知,当你用到它。实际上,resultanswer将是一个更好的标识符 - “问题”听起来像问题本身,而不是用户的回应。

1

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

5

只使用

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 Msgbox(Question) = vbYes then 
    ... 
End If 

不要叫MSGBOX两次

+0

是的。实际上,如果仅仅使用一次,则不需要为返回值设置变量。 –