Con "On Error Resume Next" non gestisci l'errore, diciamo che lo ignori. IMHO andrebbe usato solo se si è sicuri. Non è da sostituire al Try...Cath
Comunque, a parte l'utilizzo del Try...Catch che ti permette di gestire tutte le eccezioni nelle singole funzioni(metodo migliore), io uso
AddHandler Application.ThreadException, AddressOf GestoreEccezioni
Public Sub GestoreEccezioni(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)
'Qui ci metti tutta la gestione delle eccezioni non gestite nelle funzioni, con la possibilità di continuare a lavorare(rischiando di lavorare in uno stato di incoerenza e perdere tutto) o di uscire dall'applicazione.
End sub

Ciao