img img img
image
登録すると広告が削除されます

【VBA】エラー処理について質問です。 . プログラミング初心者です。 . メインプロシージャ...

img

8:3800【VBA】エラー処理について質問です。。

. プログラミング初心者です。。

.【VBA】エラー処理について質問です。。

. プログラミング初心者です。。

. メインプロシージャーと、そこで呼び出される下位のプロシージャーがあり、この下位のプロシージャでエラーが発生場合に、下記のコードのようにErr.Raiseメソッドを使って、最終的なエラー処理(下記のコードであればMsgbox)を、最上位のプロシージャにまとめる方法が有ることを知りま。。

質問① このように、最終的なエラー処理を、最上位のプロシージャにまとめるのは一般的な方法なのでしょうか。。

質問② 下位のプロシージャでADO接続などを利用いて、エラー発生に伴い処理を中断する場合でも、オブジェクトの解放などの終了処理が必要な場合には、下位のプロシージャのErrorHandler:の中で、「終了処理(例えばオブジェクトの解放)」⇒「Err.Raise」の順番に記述する必要があると思いますが、正しいでしょうか。。

(Err.Raiseを実行すると、すぐに上位のプロシージャに遷移しまうため、逆の順番では「終了処理」が実行されない) 質問③ 下位のプロシージャのErrorHandler:の中で「終了処理」⇒「Err.Raise」の順番に記述する場合に、別途、処理が正常に完了時の「終了処理」も用意する必要があると思います。。

両者を独立作成すると「終了処理」のコードが重複しますので、両者をまとめて、「終了処理」⇒「Err.Number <> 0 のときはErr.Raise」とし、エラー発生時も正常完了時もこのセクション?に遷移させることを考えま。。

このようなやり方は一般的でしょうか。。

(感覚的には、On Error Gotoで、正常完了時と同じセクション?に遷移するのは、若干の違和感がありま。。

) また、もっと良いやり方はあるでしょうか。。

P.S. 明けまおめでとうございます。。

本年もよろしくお願いいたします。。

<コード> Sub Main() On Error Goto ErrorHandler LowerMethod Exit Sub ErrorHandler: MsgBox "エラー発生元: " & Err.Source & vbCrLf & "詳細: " & Err.Description End Sub Sub LowerMethod() On Error Goto ErrorHandler '処理を記述する Exit Sub ErrorHandler: Err.Raise Err.Number, "LowerMethod", Err.Description End SubVisual Basic | プログラミング4