エラー処理について教えてください。
以下の様なマクロで、インプットボックスに
数字以外を入力した場合のエラー処理ですが、
次のような手順で進めると
「型が一致しません」とエラー表示されてしまいます。
どこがいけないのでしょうか?
【手順】
・マクロ実行
・インプットボックスへ数字以外の文字を入力
・「OK」クリック
・再びインプットボックス出現
・もう一度数字以外の文字を入力
・「OK」クリック←ここでエラー表示!
Sub TEST()
Dim Tuki As Integer
On Error GoTo INPT
INPT:
Tuki = InputBox("何月分ですか?" & vbCrLf & _
"数字を入力してください。", "集計月入力", 1)
If Tuki = 0 Or Tuki > 12 Then
MsgBox "1から12の数字を入力してください。"
GoTo INPT
End If
On Error GoTo 0
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは。
#2の回答者です。
>私の作ったコードと同じ症状になりました。
> 「型が一致しません」とエラー表示されてしまいます。
私の#2の最初のコードでも、そんなはずはないはずです。
もしかしたら、変数の宣言が、
Dim Tuki As Integer
となっているのではないでしょうか。ここがInteger ではダメなのです。
InputBox 関数の戻り値は、見かけ上、文字列で返ります。数値を入れれば、数値で返ります。ただし、Tuki の型が、Integer にしていますと、受けられないので、そこで、「型が違う」といって、エラーが発生します。文字も数値も一旦は、なんでも引き受けて、その後で、振り分けないとできません。
また、Cancel 値も、ここでは、0の扱いになって振り分けられません。正確には、数値の0ではありません。(それを振り分ける特殊な古い関数はありますが、今では使いません。)
それで、InputBox メソッド(Application.InputBox)を使うことが多くなりました。こちらの場合は、戻り値は、Type 1(数字), 2(文字)などがありますが、これも、思ったようには行かない部分があります。Type:=1 として、試してみると、別のメッセージが出てきます。
「 数値が正しくありません。」と出てきます。
InputBox 関数の中で自動的に振り分けます。私は、それがうっとうしいので、Type:=2 にして、文字で受けるようにしています。これは、なかなか、難しいです。パターンを覚えて、それに当てはめるようにして使うのがよいです。
はい。Integerのままでした<(_ _)>
的確なご返答にため息が出そうな程でした。
ありがとうございました!!
InputBox がこれ程厄介だとは思ってませんでした。
ご返答の最後の部分にある通り、経験を増やして
自分の使いやすいやり方を覚えた方がいいのですね。
早くWendy02さんの様にサクサク作れるようになりたいです。
No.3
- 回答日時:
こういう形のOn Error GoTo の使い方は余り感心しませんが、なるべく元のソースを変えずにエラーが起こらないようにするのでしたら、InputBoxメッソドを使うという手もありますね。
↓こんな感じで数値だけが戻るようにします。
Tuki = Application.InputBox("何月分ですか?" & vbCrLf & "数字を入力してください。", "集計月入力", 1, Type:=1)
No.2
- 回答日時:
こんにちは。
箇条書きで書くと、
1. On Error GoTo トラップだけでは、そのエラーは捕まえられません。
2. INPT:のラベルの位置が違っています。
3. InputBox 関数と、InputBox メソッドとの使い方には違いがあり、メソッドのほうが便利です。
むやみに On Error トラップを使っても意味がありません。
元のコードでは、どうしても、上手く行かないはずです。
'------------------------------------
Sub TEST_R()
Dim Tuki As Variant
On Error GoTo INPT
START:
Tuki = InputBox("何月分ですか?" & vbCrLf & _
"数字を入力してください。", "集計月入力", 1)
Tuki = Val(Tuki)
If Tuki = 0 Or Tuki > 12 Then
MsgBox "1から12の数字を入力してください。"
GoTo START
End If
MsgBox Tuki & "月"
Exit Sub
INPT:
Tuki = 0
GoTo START
End Sub
'---------------------------------
'サンプルコード
Sub Sample()
Dim Tuki As Variant
Do
Tuki = Application.InputBox("何月分ですか?:1~12" & vbCrLf & _
"数字を入力してください。", "集計月入力", 1, Type:=2)
If VarType(Tuki) = vbBoolean Or Tuki = "" Then Exit Sub
If IsNumeric(Tuki) And (Tuki > 0 And Tuki < 13) Then
Exit Do
Else
MsgBox "Error: " & Tuki & vbCrLf & "1から12の数字を入力してください。"
End If
Loop
MsgBox Tuki & "月が入力されました。", vbInformation
End Sub
この回答への補足
お礼を投稿した後、頂いたコードを実行してみました。
ループの方はバッチリでした☆
ただ、上のエラー処理のコードを実行したところ、
私の作ったコードと同じ症状になりました。
何故でしょうか??
よろしければ教えてください!
回答ありがとうございました!
サンプルコードまで <(_ _)>
やはりエラー処理は下に持ってこないとダメなんですね。
「こうすれば簡単じゃん♪」って思ってたら上手くいきませんでした;
下のコードの方が素直そうですね♪
参考にさせていただきます。助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAがブレークモードになっ...
-
Invalid procedure call or arg...
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
実行時エラー3001「引数が間違...
-
アクセス 実行時エラー3265
-
マクロについて教えてください...
-
ASP.NET OleDbConnectionが定義...
-
エクセルエラー13型が一致しま...
-
VBS実行時エラー オブジェクト...
-
VB6+SQL サーバー 2000 で 実行...
-
EOFError: EOF when reading a ...
-
VBAにて計算式をセルへ代入でき...
-
ExcelVBAのFindFirstエラ...
-
「コンパイルエラー:プロシー...
-
VBAで、定数式が必要ですのエラ...
-
Excel2019 ワークシートのコピ...
-
チェックボックスをオンにする...
-
EXCEL/VBAで、自分のPCだけエラ...
-
「実行時エラー3001」のポップ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
【Excel VBA】マクロをボタンに...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
実行時エラー3001「引数が間違...
-
ExcelVBA Range クラスの Page...
-
ExcelVBAで、ユーザー定義型は...
-
EXCEL VBAマクロ中断でデバッグ...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
なぜエラーになるのでしょうか...
-
VBAのコードがエラーになっ...
-
[Delphi] データセットは閉じて...
おすすめ情報