大量のレコードを読み込みながら処理するような場面では、その途中のどこかでエラーが発生することは分かっていても、その時点までステップ実行するのは困難な場合があります。たとえば1万件のレコードを読み込むループで、もしかしたら1万件目にそのエラーが発生しているかもしれないからです。
また、エラールーチンが書かれていないプログラムであればそのエラー個所でプログラムが停止しますので位置を確認するのは簡単ですが、エラー処理(On Error GoTo *****)が組み込まれている場合、ある意味想定された動きをしますので、そのエラールーチン内のプログラムによっては何のエラーメッセージもなくプロシージャを終了してしまうかもしれません。
そのようなとき、一時的に次のような2つの記述を付け加えることで、エラー個所を調べることができます。
On Error GoTo Err_Handler
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl売上")
With rst
Do Until .EOF
~~ ここで1レコードごとの何らかの処理 ~~
.MoveNext
Loop
.Close
End With
Exit_Here:
Exit Sub
Err_Handler:
Stop ← 一時的にこれを付け加える
Resume ← 一時的にこれを付け加える
Resume Exit_Here:
このようなプログラムを実行した場合、次のような挙動および操作をすることで、エラー個所を突き止めることができます。
- プログラム上のどこかでエラーが発生すると、それがトラップされてErr_Handlerのルーチンへ飛ぶ
- 「Stop」ステートメントによって、その時点でプログラムが一時停止する

- この状態でステップ実行を行う

- 「Resume」ステートメントの行が実行されることで、エラーの発生した行にカーソルが飛び、その行が黄色表示になる →この行がエラーの発生原因となった行ということになります
|