#540 エラールーチン内でエラー個所を調べる方法 VBA

大量のレコードを読み込みながら処理するような場面では、その途中のどこかでエラーが発生することは分かっていても、その時点までステップ実行するのは困難な場合があります。たとえば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:



このようなプログラムを実行した場合、次のような挙動および操作をすることで、エラー個所を突き止めることができます。
  1. プログラム上のどこかでエラーが発生すると、それがトラップされてErr_Handlerのルーチンへ飛ぶ

  2. 「Stop」ステートメントによって、その時点でプログラムが一時停止する
    プログラムが一時停止

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

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

※デバッグが完了したら、上記の2つのステートメントは削除もしくはコメントアウトしておきます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved