Hay varios Controladores de Error en VB, siempre hablando de errores internos del programa.
On Error Resume NextEste controlador es muy útil para manipular errores no controlados, porque en el caso que haya un error pasa a la siguiente instrucción, por ejemplo:
Function Div(Dividendo As Double, Divisor As Double)As Double
On Error Resume Next
Div = Dividendo / Divisor
End Function
Si por ejemplo, se le pasa como divisor 0, ese código produciría el error "11, División por cero", pero al poner ese controlador de error lo que haría el código es pasar directamente a Exit Function.
Las contras de esto es que en muchos casos el programa producirá errores y no devolverá el valor esperado, por lo que el error se arrastrará y no funcionará como se espera. Por eso, al usar On Error Resume Next, es necesario saber qué errores se pueden llegar a producir y controlarlos, en el caso anterior sería así:
Function Div(Dividendo As Double, Divisor As Double)As Double
On Error Resume Next
Div = Dividendo / Divisor
If Err.Number <> 0 Then
Call MsgBox("[ Error ] " & Err.Description
End If
End Function
El objeto Err se utiliza para obtener información del último error en el contexto actual, en el caso que se produzca un error la propiedad Number tendrá el nº de error, de lo contrario sería 0, por lo que se comprueba que haya un error y en el caso que se de esta situación, muestra un mensaje.
On Error Goto LabelEn este caso lo que hace este controlador de errores es ir a una etiqueta dentro del mismo procedimiento, en el caso que se produzca un error:
Function Div(Dividendo As Double, Divisor As Double)As Double
On Error Resume ErrDiv
Div = Dividendo / Divisor
ErrDiv:
If Err.Number <> 0 Then
Call MsgBox("[ Error ] " & Err.Description
End If
End Function
En este caso el programa saltaría a ErrDiv.
También existe On Error Goto 0 para eliminar el controlador de errores anterior, pero no se usa casi.