| 
    
     |  | こんにちは。 
 ひとつの方法ですが
 
 メインの側にもエラー処理ルーチンを設けます。
 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
 
 
 |  |