- ベストアンサー
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になってしまいます。 回避方法を教えてください。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ヘルプには キャンセル] ボタンをクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。 と書いてありますので Cancelボタンをクリックして抜けるときは、 タイトル = InputBox("タイトルを入力してください。") If タイトル = "" Then Exit Sub とします。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一般的に、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さんのリンク先の通りです。
お礼
むむ!! 難しいですね! もっと言葉の意味を調べて勉強してみます。
- fujillin
- ベストアンサー率61% (1594/2576)
似たような質問が、以前ありました。 Cancelを識別する方法の例が出ていますので、ご参考までに。 http://oshiete1.goo.ne.jp/qa5011343.html
お礼
ありがとうございます。参考にします。
- end-u
- ベストアンサー率79% (496/625)
Sub test() Dim v v = InputBox("キャンセルをクリック") Stop End Sub こんなので、VBEで[ローカルウィンドウ]を表示させて変数 v に何がはいるか確認してみてください。 すると If タイトル = "" Then Exit Sub もしくは If Len(タイトル) = 0 Then Exit Sub のような判定をする事がわかるはず。
お礼
ありがとうございます。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは 以下のような形でいかがでしょうか? このサンプルの場合、なにも入力しないでOKを押した場合でも、キャンセルを押したのと同じ動作になります。 Sub temp() If InputBox("タイトルを入力してください") = "" Then MsgBox "タイトルが入力されていません" Exit Sub End If End Sub
お礼
なるほど!ありがとうございます。
お礼
文字数か空白かで判断するんですね。 ありがとうございます。