プロが教えるわが家の防犯対策術!

VBAのOn Errorステートメントでエラー処理を行うときに、VBAソースの何行目で
エラーが発生したかをメッセージBOXに表示したいのですが。

また、上記に近い類似の方法がありますか。

ご指導願います。

A 回答 (4件)

こんにちは。



私は、別案というよりも、コーディングの基本の基本ですが、On Error トラップ(On Error Goto xx) というものは、最後につけるもので、製作中にトラップを置いたら、どこでエラーが出たか分かりません。

出来上がっている場合は、デバッグのステップインで、短い場合は、どこでマクロが飛ぶのか調べます。もしくは、ブレークポイントを段階的につけていき、どこまでは、OKか調べます。

コンパイル後に起こるのですから、[実行時エラー]だと思いますから、それなり見当はつくはずです。

もう一つ、コーディングの基本的なことですが、コードの行数は増やさずに、サブルーチンを増やすことです。一般的には、100行以下と言われています。

私は、ずっと、そのようにしてきています。
    • good
    • 2

いやいや、ないこともないんですよ・・・



'先頭の数字は消さないでね!
Sub hoge()
3 On Error GoTo ErrHnd
4 Err.Raise 9999, "test"
5 ErrHnd:
6 MsgBox VBA.Erl & " : " & Err.Number & Err.Source
End Sub

VBA.Erl が 4 (Error発生行の先頭の数字)を表示します。
手入力したソレが「何行目」と一致するとは限りませんが。

使うことはないです。
    • good
    • 7

残念ながら、VBAにそのような機能はありません。


よって、これを実現するためには自分で『作りこみ』をする
必要があります。

『作りこみ』の方法は No.1 さんが提示されている方式が
スタンダードでしょう。プログラム内に『ここまで実行し
た』ことを記録するコードをいちいち埋め込むのは、超面
倒で嫌になってきますが、VBAを使う限り必要悪として
受け入れましょう。
    • good
    • 0

> 上記に近い類似の方法がありますか。


自前で「処理中のブロック名」を持つ変数作っておいて
処理単位に値を代入し直し、エラートラップで表示する。

ブロックを細かくすればするほど、特定はしやすいが手間が増える。
エラー発生箇所を大まかに特定したら、F8のステップ実行もアリ。
ただ、まれにF8では止まらないことがあったので
イミディエイトウインドウにDebug.Print現在位置を表示させたりします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A