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

Pocket

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

[ 2011年11月1日 | カテゴリー: デジタル | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報