- ベストアンサー
VBAのエラー処理がうまくいきません!?
下記のようなマクロを見よう見まねで作りました。 K13:K43に入れた文字列としての計算式を隣りのJ列に計算された答えを入れるというものです。 うまく動いたのですが、式が間違っている場合、エラーになるのでエラー処理をいれてみました。 On Error GoTo Trapと Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" の3行を新たに挿入しましたが、どういうわけか全部がエラーになってしまいMsgBoxが出てしまいます。 どこが間違ったのでしょうか? Sub 包括料算() Dim i As Long Sheets("包括明細").Select For i = 1 To 30 If Range("K" & i + 13) <> "" Then 'K列14~43行で空白以外のセルの場合 On Error GoTo Trap 'エラーの時Trapへ Range("J" & i + 13).Formula = "=ROUND(" & Range("K" & i + 13).Value & ",2)" 'J列14~43行に式としていれる Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" End If Next A% = MsgBox("入力完了ですか?" _ + Chr(&HD) + Chr(&HA) + "", vbYesNo + vbQuestion, "確認") Select Case A% Case vbYes 包括終了 '終了用マクロへ Case vbNo Exit Sub End Select End Sub
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 場所はNo.1の人のでいいですが、Exit Subが抜けています。 End Select Exit Sub Trap:MsgBox "式が不正です。", vbCritical, "式" End Sub あと、On ErrorステートメントもForループの外(前)へ出す方がいいでしょう。 それから、本題から外れますが、Forループの中で、常に 「i + 13」 としているなら、最初からループ範囲を、 For i = 14 To 43 としておけばいいのではないでしょうか。
その他の回答 (4)
- PAPA0427
- ベストアンサー率22% (559/2488)
ごめんなさい。間違ってました。 前の方ですね。そうですね。
お礼
お世話になりありがとう御座いました! 本当にたすかりました。
- maruru01
- ベストアンサー率51% (1179/2272)
>Exit Subは今回の場合必要ありません。 違います。 Exit Subを置かないと、エラーが起こらなくても、End Selectの後に"必ず"MsgBoxを実行してしまいます。 だから、正常な場合は、Trap:の"前で"プロシージャを抜けるために、Exit Subは必要です。
お礼
お世話になりありがとう御座いました! 本当にたすかりました。
- PAPA0427
- ベストアンサー率22% (559/2488)
Exit Subは今回の場合必要ありません。 次の行がEnd Subですから。 あとは、#2のmaruru01さんのご指摘通りです。
- PAPA0427
- ベストアンサー率22% (559/2488)
エラートラップを記述する場所が間違ってます。 End Select Trap:MsgBox "式が不正です。", vbCritical, "式" End Sub この位置です。 処理を継続したければ、 End Select Trap:MsgBox "式が不正です。", vbCritical, "式" ResumeNext End Sub です。
お礼
お世話になりありがとう御座いました! 本当にたすかりました。
お礼
お世話になりありがとう御座いました! 本当にたすかりました。