You'd get it from books dedicated to VB programming, and not from MS
documentation.
Your assumption is essentially correct, and Ralph added a bit of clarity.
My take on it, goes like this:
As it relates to error handling, VB code is always in one of three states:
1. No error handler present - all errors climb back up the call stack.
2. A handler is present, but no exception has occured - the ideal state.
3. A handler is present and an exception has occured.
You will find VB documentation that uses the phrase 'an enabled error handler'
when they refer to the 2nd state. Where also 'an active error handler' refers
to the 3rd state.
As Ralph points out, once your error handling code is executing (due to some
exception in the procedure) you can not set another error handler to trap
errors that might happen in the error handling section while the current
error handler is still 'active'.
With "On Error Goto -1", you can de-activate the current error handler. I
used the phrase 'close active error handler' in the example. Whatever you call
it, the current error handler is left enabled, just not active. That is why
I did not need to include On Error inside the For/Each loop.
Resume would not work (well) in this case because you would want to put the
Resume just after the MsgBox command indicating an invalid item. While that
would work if an exception is raised, it would cause problems if an item in
the group failed both the IF condition and ElseIF condition and got down to
the Else clause without raising an error. In that case, the Resume statement
in the Else clause would itself cause an error, which would back jump to the
MsgBox and show the MsgBox a second time.
The main point I wanted to show with the example was that 'sufficient' error
handling was present, without making a mess of an otherwise simple procedure!
HTH
LFS