VBAのMsgBoxとInputBoxではキャンセルの戻り値が違う

VBAでメッセージボックスを表示するには次のようにします。

Sub test_msgbox()
    res = MsgBox("テスト", vbOKCancel)
End Sub

この場合、OKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、「1」(定数だと「vbOK」)が返ります。
キャンセルをクリックした場合、「2」(定数だと「vbCancel」)が返ります。

一方、ユーザーに入力を促すインプットボックスを表示するには次のようにします。

Sub test_inputbox()
    res = InputBox("テスト")
End Sub

この場合、テキストボックスとOKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、テキストボックスの内容が返ります。
次が注意です。
キャンセルをクリックした場合、長さ0の文字列(“”)を返します。

ここをMsgBoxと混同して「キャンセルボタンを押すと戻り値がvbCancelだから処理終了」というつもりで次のように書くと失敗します。

Sub test_inputbox()
    res = InputBox("テスト")
    If res = vbCancel Then
        Exit Sub
    End If
    '後続処理
End Sub

定数「vbCancel」は「2」と同じですので、インプットボックスで「2」を入力した場合、処理が終了してしまいます。
次のように書くとよいです。

Sub test_inputbox()
    res = InputBox("テスト", vbOKCancel)
    If res = "" Then
        Exit Sub
    End If
    '後続処理
End Sub

コメント

タイトルとURLをコピーしました