- 締切済み
エクセルのマクロについて
エクセルでマクロを作成しました。 インプットボックスに日付を入力するのですが、インプットボックスのキャンセル時に、マクロを停止したいのですが、色々試しましたが、上手く出来ません。(IfやOn Erorrなど)どの様な方法があるでしょうか? 入力する日付は○/1と入力しています。 Dim a As Date a = InputBOx("日付を入力してください") この様なコードで開始しています。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
こんにちは。 InputBoxには関数とメソッドの2種類あります。 関数の場合、未入力でボタンをクリックすると、OKもキャンセルも同じ結果を返すようです。 なので、どちらのボタンをクリックしたのか判断できにくいと思います。 ところが、メソッドの場合はキャンセルをクリックするとFalseが返ってきます。(戻り値を入れる変数の型にもよります。) 今回の場合は、こちらの方が判断しやすいと思います。 Dim a As Variant a = Application.InputBox("日付を入力してください") If a <> False Then '日付の時の処理 Else MsgBox "キャンセルされました。" End If どうでしょうか。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 InputBox 関数は、古い方法(レガシー)ですから、現在のVBAでは、基本的には使わないようにします。 Application.InputBox (InputBox メソッド)を使います。 >インプットボックスのキャンセル時 InputBox 関数での Cancel は、見かけ上は、0と同じにように見えます。ただし、0とは違います。InputBox関数のCancel は、古い関数の 「StrPtr」を使いますが、今は、あまり使いません。 また、通常、 Dim a As Date とデータ型の宣言はしません。 簡単な例: Sub Test1() Dim a As Variant a = Application.InputBox("日付を入力してください。yyyy/mm/dd ", Type:=2) If VarType(a) = vbBoolean Or a = "" Then Exit Sub End If If Len(a) - Len(Replace(a, "/", "")) = 1 Then a = Year(Date) & "/" & a End If If IsDate(a) Then MsgBox Format$(a, "yyyy/MM/dd") Else MsgBox "日付ではありません。" End If End Sub
- FEX2053
- ベストアンサー率37% (7991/21371)
InputBoxって、キャンセルでエラー吐きましたっけ? 確か空白文字列を送り出すだけだったかと・・・ (何も入力しないでo.k.した場合と同じ結果になる筈) ですので、 a = InputBox("日付を入力してください") if a<>"" then '日付入力の場合の処理 else '何も入力しなかった場合の処理 end if じゃないかと・・・。
- merlionXX
- ベストアンサー率48% (1930/4007)
一例です。 Sub test01() Dim a As Date On Error GoTo line a = InputBox("日付を入力してください") On Error GoTo 0 '現在の処理 Exit Sub line: MsgBox "日付を認識できません。", vbCritical, "Σ( ̄ロ ̄lll)" End Sub