いきなりですが、問題です。
次のマクロMacro1を実行するとどういう結果になるでしょう。
===== ちょっと考えましょうか======
Option Explicit
Sub Macro1()
On Error Resume Next
Err.Raise 10
Call Func1
If (Err) Then
MsgBox "Macro1_error"
End If
End SubSub Func1(param1 As Integer)
On Error GoTo ERR_Func1
Exit Sub
ERR_Func1:
MsgBox "Func1_error"
End Sub
===== わかりましたか?======
メッセージボックス"Func1_error"を表示すると思った方、落ち着いて考えましょう。
メッセージボックス"Macro1_error"を表示すると思った方、おめでとうございます!
気持ちは分かりますが、見事に今回の話題にはまっています。
さて、正解は「何も起こらずに終了する」ですね。Err.Raise 10で、エラーを発生させているのでIf (Err) ThenでErr=10だと思われた方もいるかもしれません。
ところが、この段階ではErr=0なんですね。 Func1でOn Errorしてますよね。ここで、0にされてしまうんですね。(Errのヘルプを見てみましょう)
なんでもない事のようですが、この手のミスでえらい目に合う人って結構いるんですよね。せっかくのエラー処理がこれではいけません。Errがクリアされる事を知らないと、はまる事になります。
このように、Errにはクリアされるタイミングがありますので、良く注意してResume Nextした方がよいでしょう。