VBAでのエラー処理でよく使う定型構造

Visual Basic for Applications (VBA)

VBAのエラー処理は、Javaなどで使われるTry ~ Catchが使えないので、それに似せて確実にエラー処理が行えるようにする構造にして開発するようにしています。

Public Sub Test()
On Error GoTo Catch

'' ここにエラーが発生する可能性のあるコードを記述

Finally:
'' ここにオブジェクトの破棄処理などを記述
Exit Function
Catch:
'' ここにエラー処理を記述
GoTo Finally
End Sub

On Error Goto Catchでこれ以降でエラーが発生した場合は、Catchラベルに飛ぶようにしています。エラー処理はCatchラベル部で一括して記述します。エラー処理後にGoTo FinallyによってFinallyラベルへ移動します。このFinally部にオブジェクトの破棄処理を記述することで安全にかつ確実に破棄することができます。

エラーが発生しない場合は、Finallyラベルの最後に書かれているExit Functionによって関数から脱出するので、エラー処理を行うCatch部分は実行されません。