• ベストアンサー

InputBox キャンセルボタンが押された時の処理

こんばんは。 Sub test() Dim タイトル As String タイトル = InputBox("タイトルを入力してください。") If Cancel = True Then Exit Sub ’次のコード・・・ ’次のコード・・・ End Sub このコードを実行した時に 下記のダイアログが出てきて 右のキャンセルボタンを押すと、 「If Cancel = True Then Exit Sub」 でsubステートメントを抜けたいのですが 「Cancel」の部分が 「変数が定義されていません」とエラーになってしまいます。 Dim Cancel As Boolean を追加してキャンセルボタンを押しても TrueではなくFalseになってしまいます。 回避方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

ヘルプには キャンセル] ボタンをクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。 と書いてありますので   Cancelボタンをクリックして抜けるときは、 タイトル = InputBox("タイトルを入力してください。") If タイトル = "" Then Exit Sub とします。

ijuhyg
質問者

お礼

文字数か空白かで判断するんですね。 ありがとうございます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 一般的に、InputBox (関数)に、0と[ESC]の区別が付きません。本当は、キャンセル(Esc)は、「0」ではないけれども、数字の0のようしか見えません。ただし、数字で使えるのは、1回だけです。特殊なコードが混じりこんでいます。以下は、トライアルのコードで、実際には使われません。 かつては、StrPtr関数で判定をしていました。   Dim ret As Variant 'Variant 型に指定   Dim buf() As Byte   ret = InputBox("タイトルを入力してください。")   buf = ret 'パイナリで調べる   If UBound(buf) < 0 Then Exit Sub   MsgBox ret 現在は、Applicaiton.InputBox (メソッド)を使うようにします。 Dim ret As Variant 'Variant 型に指定 ret = Application.InputBox("タイトルを入力してください。", Type:=2) '文字で返す If VarType(ret) = vbBoolean Or ret = "" Then Exit Sub '次のコード・・・ '次のコード・・・ 後は、#4さんのリンク先の通りです。

ijuhyg
質問者

お礼

むむ!! 難しいですね! もっと言葉の意味を調べて勉強してみます。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

似たような質問が、以前ありました。 Cancelを識別する方法の例が出ていますので、ご参考までに。 http://oshiete1.goo.ne.jp/qa5011343.html

ijuhyg
質問者

お礼

ありがとうございます。参考にします。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

Sub test()   Dim v   v = InputBox("キャンセルをクリック")   Stop End Sub こんなので、VBEで[ローカルウィンドウ]を表示させて変数 v に何がはいるか確認してみてください。 すると If タイトル = "" Then Exit Sub もしくは If Len(タイトル) = 0 Then Exit Sub のような判定をする事がわかるはず。

ijuhyg
質問者

お礼

ありがとうございます。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんばんは 以下のような形でいかがでしょうか? このサンプルの場合、なにも入力しないでOKを押した場合でも、キャンセルを押したのと同じ動作になります。 Sub temp() If InputBox("タイトルを入力してください") = "" Then MsgBox "タイトルが入力されていません" Exit Sub End If End Sub

ijuhyg
質問者

お礼

なるほど!ありがとうございます。

関連するQ&A