Hi Sid,
You are correct in all but one minor detail (see below)
I feel another article coming on
You have to be careful with terminology - I hope it comes clear..
First off - you won't get compile errors. It is valid to code as many On Error statements as you like.
Secondly - you won't get run time errors either! Whether an On Error statement has an effect depends on one thing only - is there an active error handler at the time. If there is no active handler, an on error will enable one and disable a previously enabled one.
If there is an active handler, an on error will have no effect
Now, what the On Error statement means is:When there is an error execute the statement which follows "On Error".
The only statements which are allowed following the On Error are Goto and Resume, so one of these wil be executed following an error.
If a Resume is executed, that's the end of the matter as far as VBA is concerned; what you actually do in your code is up to you but VBA has no more interest as far as error-handling goes and the error handler remains in effect; if there is another error the error handler will again be triggered.
If a GoTo is executed the error handler which was previously enabled becomes active; when it is active it is no longer enabled. If another error occurs while an error handler is active, VBA will look up the calling chain for an enabled error handler and execute the first one it finds (which may be - and in your tests obviously was - the system handler).
An active error handler remains active until a Resume is executed - or the procedure ends (when the error handler within it becomes inactive and disabled). A Resume does two things - it executes a GoTo to the label (or line number) given in the Resume statement and it deactivates and re-enables the error handler.