|
こんにちは。
ひとつの方法ですが
メインの側にもエラー処理ルーチンを設けます。
SUB側のエラー処理ルーチンでは、
・SUB側でエラー処理が完結する場合は処理する
・メイン側で処理を中断する場合は Err.Raise でエラーを再発生させる
というやり方があります。
以下のサンプルでは、オーバーフローの場合はSUB側で処理し、
0除算はメイン側で中断しています。
Sub main()
On Error GoTo Err_Exit
Call sub1
On Error GoTo 0
Exit Sub
Err_Exit:
MsgBox Err.Description
End Sub
Sub sub1()
Dim a As Integer, b As Integer, c As Integer
On Error GoTo Err_handler
a = 2
b = 2 ^ 14
c = a * b ' オーバーフローエラー
Debug.Print c
a = 2
b = 0
c = a / b ' 0除算のエラー
Debug.Print c
On Error GoTo 0
Exit Sub
Err_handler:
Select Case Err.Number
Case 6 ' オーバーフロー
b = b / 2
Resume
Case Else
Err.Raise Err.Number
End Select
End Sub
|
|