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]