2016-11-24 103 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

是的。實際上,如果僅僅使用一次,則不需要爲返回值設置變量。 –