No, that is not correct. You only need to set an error handler at the top level of procedures, any called procedure will inherit that error handler unless it resets it or sets its own.

[vba]

Public Function TopLevel()

On Error GoTo ErrorHandler

Call Level1Proc1

Call Level1Proc2

Exit Function
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description & " in top level"

End Function

Public Function Level1Proc1()

'handle our own errors
On Error GoTo l11_ErrHandler

'force an error
Debug.Print 1 / 0

Exit Function

l11_ErrHandler:
'ignore this error
Debug.Print Err.Number & ": " & Err.Description; " & in level 1"
End Function

Public Function Level1Proc2()

'call another level

Call Level2Proc1

End Function

Public Function Level2Proc1()

'force an error
Debug.Print 1 / 0

End Function
[/vba]