2016-11-24 3 views
1

У меня есть Yes/No MsgBox в моем сценарии VBA, который возвращает вопрос для пользователя. Всякий раз, когда нажимаются кнопки «Да» или «Нет», помимо скрипта, запускающего соответствующий код, появляется еще MsgBox с цифрами «6» или «7». Как отключить эту секунду MsgBox?MsgBox Да/Нет 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' – 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, чтобы избежать двусмысленности и получить автозаполнения/IntelliSense, когда вы позже использовать его. Фактически, result или answer был бы лучшим идентификатором - «вопрос» звучит как сам вопрос, а не ответ пользователя.

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

Yup. Фактически нет необходимости иметь переменную для возвращаемого значения, если она будет использоваться только один раз. –