web-dev-qa-db-ja.com

MsgBoxはい/いいえExcel VBA

Yes/No MsgBoxinユーザーに回答する質問を返すVBAスクリプト。 「はい」または「いいえ」ボタンを押すたびに、それぞれのコードを実行するスクリプトに加えて、数字「6」または「7」の別のMsgBoxがポップアップ表示されます。この2番目の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
9
franciscofcosta

MsgBox関数は、vbMsgBoxResult値を返します。これは列挙型です(Longではなく、Integer整数でなければなりません)。

あなたはそれを2回呼び出しています:

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

1回はquestionを割り当て、もう1回はquestionを表示します。この時点で、vbYes(6)またはvbNo(7)のいずれかが含まれます。

enter image description here

question As vbMsgBoxResultを宣言して、あいまいさを避け、後で使用するときにオートコンプリート/ IntelliSenseを取得します。実際には、resultまたはanswerの方がより適切な識別子です。「質問」は質問自体のように聞こえます。ユーザーの応答。

12
Mathieu Guindon

ただ使う

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を2回呼び出さないでください

8
Rosetta

MsgBox questionを削除します。これにより、質問の値が入力された2番目のメッセージボックスが不必要に作成されます(たとえば、vbYesの戻り値は6であるため、yesまたはnoのどちらを選択したかに応じて6または7)。

1
bobajob