Nein, das geht nicht (also das mit dem Ausserhalb). Ein "korrektes" ErrorHandling sieht so aus (für eine Sub):
EndSub:
Exit Sub
Errorcase:
Messagebox "ERROR FOUND: " & CStr(Err)
Resume EndSub
End Sub
Auf diese Weise läuft der Code NICHT in die ErrorRoutine, wenn er auf "normalem" Weg das "Exit Sub" vor dem ErrorHandler erreicht.
Das Resume ist immer dann wichtig, wenn Du den Fehler "löschen" willst, ihn also nicht an eine ggf. aufrufende Funktion "weitergeben" willst.
Ohne Resume würde die aufrufende Sub / Function selbst wieder in ihren eigenen ErrorHandler laufen, was manchmal das ist, was man will, manchmal aber auch nicht, ist also immer Geschmacksache / bzw. Kontextabhängig, ob da als letzte Zeile "Resume EndSub" oder "Exit Sub" steht.
EDIT: Wenn man sowas wie ein Log hat, dann schliesst man das typischerweise nach dem "EndSub"- Label, also so:
EndSub:
If not oLog is Nothing then
call oLog.Close()
End If
Exit Sub
Errorcase:
Call clLog.Logerror(2, " ERROR FOUND?: " & Err & ", " & Error$)
Resume EndSub
End Sub
Auf diese Weise ist das Log IMMER geschlossen, und es geht nix verloren...