web-dev-qa-db-fra.com

MsgBox Oui/Non Excel VBA

J'ai un Yes/No MsgBoxdans mon script VBA qui renvoie une question à laquelle l'utilisateur doit répondre. Chaque fois que vous appuyez sur les boutons "Oui" ou "Non", outre le script exécutant son code respectif, une autre variable MsgBox portant les chiffres "6" ou "7" apparaît. Comment désactiver cette seconde MsgBox?

Voici mon code:

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
7
franciscofcosta

La fonction MsgBox renvoie une valeur vbMsgBoxResult, qui est une énumération (et doit être un entier Long et non pas Integer).

Vous l'appelez deux fois:

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

Une fois pour assigner question, et une autre fois pour afficher question - qui à ce stade va contenir soit vbYes (6), soit vbNo (7).

 enter image description here

Je déclarerais question As vbMsgBoxResult pour éviter les ambiguïtés et obtenir la saisie semi-automatique/IntelliSense plus tard. En fait, result ou answer serait un meilleur identifiant - "question" sonne comme la question elle-même, pas la réponse de l'utilisateur.

11
Mathieu Guindon

juste utiliser 

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

serait suffisant.

De plus, la fonction if peut être

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

Ne pas appeler MsgBox deux fois

8
Rosetta

Supprimer MsgBox question. Cela crée inutilement une deuxième boîte de message contenant la valeur de question (6 ou 7, selon que vous ayez choisi oui ou non, comme par exemple vbYes a la valeur de retour 6). 

1
bobajob