プロが教える店舗&オフィスのセキュリティ対策術

InputBoxでもしキャンセルボタンが押されたら・・・ってどうやればいいですか?

Sub あああ()
Dim a As String
a = InputBox("文字を入れてください。")
MsgBox a
End Sub

をした時に、キャンセルボタンをクリックしたかどうかを取得したいのですが、どうすればいいんですか?

a = InputBox("文字を入れてください。")
の次に
Cancel = True
をいれても
vbCancel = True
をいれてもエラーになります。

Sub あああ()
Dim a As String
a = InputBox("文字を入れてください。")

If a = "" Then
MsgBox "キャンセルが押されました"
End If
End Sub
これだとOKでもキャンセルでもメッセージが表示されます。

「キャンセルボタンをクリックしたかどうかを」の質問画像

A 回答 (4件)

Sub あああ()


Dim a As String
a = InputBox("文字を入れてください。")
If a = "" Then
MsgBox "キャンセルが押されました"
Else
MsgBox a
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/01/28 09:08

#1です。


これね。
「これだとOKでもキャンセルでもメッセージが表示されます。 」

テキストボックスに何かを入力してOKを押せば入力した内容がaに返ってくるが、テキストボックスに何も入力しないでOKを押したり、Enterを押せば、aには""が返る。これは、キャンセルを押したときと同じなので、キャンセルを押されたというメッセージがでるのは仕方ない。InputBoxではOKとキャンセルとEnterを区別する方法はない。区別するなら、ユーザーフォームをつくってコマンドボタンで区別する。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/01/28 09:08

VB の InputBox 関数ではなく


Excel の InputBox メソッド を使えば
区別できます。

引数にも違いがありますので、
詳しくは、ヘルプでご確認ください。

Sub あああ()
  Dim a As Variant ' False が入る場合があるので Variant 型 にする
  a = Application.InputBox("文字を入れてください。", "タイトル")

  If a = False Then
    MsgBox "キャンセルが押されました"
  Else
    MsgBox a
  End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/01/28 09:08

VBA のInputBoxなら下記で確認してみてください。


Excel 2002、2010 + 32bit
Excel2013 + 64bit(試用版) でも動きましたので当分の間は大丈夫かと思います (^^ゞ

Sub cancelTest()
Dim myRes As String
Do
myRes = InputBox("なあに?")
If StrPtr(myRes) = 0 Then
MsgBox "キャンセルした"
Exit Sub
ElseIf Len(myRes) = 0 Then
MsgBox "からっぽ。何か入れて"
Else
MsgBox myRes
Exit Do
End If
Loop
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/01/28 09:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!