Private Sub b()
On Error Goto error_end
Call a
Exit Sub
error_end:
Msgbox "エラーです"
End Sub
Private Sub a()
On Error Goto error_end
ReRun:
(ここでDBからレコードセットをオープン)
Exit Sub
error_end:
Err.Clear
Goto ReRun
End Sub
------------------------------------------
というサブルーチンを書きました。
レコードセット取得時にタイムアウトやデッドロックなどのエラーで、取得に失敗した場合に
リトライさせようと思っているのですが、1回目のエラーでは正常にReRunに戻り再度レコードセットを
オープンしようとするのですが、2回目のレコードセットの取得に失敗すると、Sub a() から処理が抜け、
「エラーです」のメッセージが表示されてしまいます。
なぜSub a() から処理が抜けてしまうのでしょうか?
どのように直せばリトライを継続できるのでしょうか?
GotoではなくResumeでしょうか。
>なぜSub a() から処理が抜けてしまうのでしょうか?
ステップ実行して確かめた方がいいんじゃない?
ステップ実行を行なうと
(ここでDBからレコードセットをオープン)
の次のステップは
Sub b()の中の Msgbox "エラーです" となります。
Sub a()の中の Exit Sub は実行されていないことは確認しています。
エラートラップ中に発生したエラーはトラップされません。
さるべーじさんが書かれたように、GoTo ReRun を
Resume 0 もしくは Resume ReRun に変更してみてください。
なお、VB6でのエラートラップの方法については、ヘルプの
[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
└[プログラミング ガイド]
└[Visual Basic を使ってできること]
└[コードのデバッグおよびエラー処理]
に詳しく書かれていますので、目を通しておかれると良いでしょう。
ツイート | ![]() |