VBAのMsgBoxとInputBoxではキャンセルの戻り値が違う
VBAでメッセージボックスを表示するには次のようにします。
Sub test_msgbox()
res = MsgBox("テスト", vbOKCancel)
End Sub
res = MsgBox("テスト", vbOKCancel)
End Sub
この場合、OKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、「1」(定数だと「vbOK」)が返ります。
キャンセルをクリックした場合、「2」(定数だと「vbCancel」)が返ります。
一方、ユーザーに入力を促すインプットボックスを表示するには次のようにします。
Sub test_inputbox()
res = InputBox("テスト")
End Sub
res = InputBox("テスト")
End Sub
この場合、テキストボックスとOKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、テキストボックスの内容が返ります。
次が注意です。
キャンセルをクリックした場合、長さ0の文字列("")を返します。
ここをMsgBoxと混同して「キャンセルボタンを押すと戻り値がvbCancelだから処理終了」というつもりで次のように書くと失敗します。
Sub test_inputbox()
res = InputBox("テスト")
If res = vbCancel Then
Exit Sub
End If
'後続処理
End Sub
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
res = InputBox("テスト", vbOKCancel)
If res = "" Then
Exit Sub
End If
'後続処理
End Sub
[ 2011年11月1日 | カテゴリー: デジタル | タグ: tips , VBA ]
« 一人は男と分かっているときのもう一人は? | 東池袋大勝軒 節の一分 »
コメントを残す