You are on page 1of 5

Instrucción On Error

(Visual Basic)
Visual Studio 2015
Otras versiones

Habilita una rutina de control de errores y especifica la ubicación de la rutina dentro de
un procedimiento; también se puede utilizar para deshabilitar la rutina de control de
errores.
Sin una instrucción On Error, cualquier error en tiempo de ejecución será fatal:
aparecerá un mensaje de error y se detendrá la ejecución.
Siempre que sea posible, sugerimos utilizar el control de excepciones estructurado en
el código, en lugar de utilizar el control no estructurado de excepciones y la instrucción
de On Error . Para obtener más información, vea Instrucción Try...Catch...Finally (Visual
Basic).

Nota
La palabra clave Error también se utiliza en Error (Instrucción), lo que se admite a
efectos de compatibilidad con versiones anteriores.

Sintaxis
On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Elementos
Término

Definición

GoToline

Habilita la rutina de control de errores que empieza en la línea especificada
en el argumento line requerido.El argumento line es cualquier etiqueta de
línea o número de línea.Si se produce un error en tiempo de ejecución, el
control se transfiere a la línea especificada, con lo que se activa el
controlador de errores.La línea especificada debe estar en el mismo
procedimiento que la instrucción On Error; de lo contrario, se producirá un
error de compilación.

GoTo 0

Deshabilita un controlador de errores habilitado en el procedimiento actual
y lo restablece en Nothing.

Nota Una rutina de control de errores no es un procedimiento Sub ni Function.. cuando se produce un error en tiempo de ejecución. Un controlador de errores "habilitado" es uno activado por una instrucción On Error.Un controlador de errores "activo" es un controlador habilitado que está en el proceso de controlar un error.Exit Sub.El control se devuelve al procedimiento que realizó la llamada. el controlador de errores del procedimiento actual no podrá controlar el error. Exit Function o Exit Property). Number (Propiedad) Las rutinas de control de errores utilizan el valor de la propiedad Number del objeto Err para determinar la causa del error. en lugar de utilizar el control no estructurado de excepciones y la instrucción de On Error . el control se devuelve a los procedimientos de llamada anteriores hasta encontrar un controlador de error habilitado pero inactivo.. el control se transfiere a la instrucción inmediatamente posterior a la que produjo el error y la ejecución continúa desde ese punto.Se trata de una sección de código identificada por una etiqueta de línea o un número de línea. Si el procedimiento de llamada posee un controlador de errores habilitado..Catch. vea Instrucción Try.Para obtener más información. la ejecución continúa en el procedimiento actual en el punto designado por la instrucción Resume.Si el controlador de errores del procedimiento de llamada también está activo.. Cada vez que el controlador de errores devuelve el control a un procedimiento de llamada.Si no se encuentra ese controlador de errores. se activa para procesar el error. ese procedimiento se convierte en el procedimiento actual. Resume Next Especifica que.GoTo -1 Deshabilita una excepción habilitada en el procedimiento actual y restablece el objeto con el valor Nothing. Si se produce un error mientras un controlador de errores está activo (desde que se genera el error hasta que se ejecuta una instrucción Resume.Finally (Visual Basic).Cuando un controlador de errores termina de procesar un error en cualquier procedimiento. el error se convierte en fatal en el punto en que se produjo originalmente.Utilice este formato en lugar de On Error GoTo al tener acceso a los objetos.La rutina debería comprobar o guardar los . Comentarios Nota Se recomienda usar el control estructurado de excepciones en el código siempre que sea posible.

Number.No especifica la línea 0 en el inicio del código de control de errores. Nota La construcción On Error Resume Next puede ser preferible a On Error GoTo cuando se controlan errores generados durante el acceso a otros objetos.Sin una instrucción On Error GoTo .Ésta acepta un único parámetro.Esta instrucción permite que la ejecución continúe aunque se produzca un error en tiempo de ejecución.Number está contenido en Err. Throw (Instrucción) Un error que se produce con el método Err. On Error Resume Next On Error Resume Next hace que la ejecución continúe en la instrucción que sigue a la instrucción que produjo el error en tiempo de ejecución.Se puede conocer con seguridad qué objeto colocó el código de error en Err.GetException() Is DivideByZeroException) Then ' Code for handling the error is entered here. aunque el procedimiento contenga una línea numerada con 0.Una instrucción On Error Resume Next queda inactiva cuando se llama a otro procedimiento.Description.Se puede colocar la rutina de control de errores donde se prevea que puede ocurrir el error.La comprobación de Err después de cada interacción con un objeto quita la ambigüedad acerca de cuál fue el objeto al que obtuvo acceso el código.El mensaje de error asociado a Err. sin tener en cuenta la clase de excepción.Para poder provocar excepciones de tipos de excepción derivados.Los valores de propiedades del objeto Err sólo reflejan el error más reciente. así como qué objeto generó originalmente el error (el objeto especificado en Err.Source). o en la instrucción que sigue a la llamada más reciente a otro procedimiento externo al procedimiento que contiene la instrucción On Error Resume Next. End If Observe que la instrucción On Error GoTo intercepta todos los errores. On Error GoTo 0 On Error GoTo 0 deshabilita el control de errores en el procedimiento actual.valores de propiedades relevantes del objeto Err antes de que se produzca otro error o de que se realice una llamada a un procedimiento que pueda causar un error. en vez de transferir el control a otro punto del procedimiento. por lo que se debe ejecutar una instrucción On Error Resume Next en cada rutina llamada si se desea controlar el error en línea dentro de esa rutina.Raise establece la propiedad Exception en una instancia recientemente creada de la claseException.En el siguiente ejemplo se muestra cómo se pueden utilizar estas características con el control de excepciones existente: VB On Error GoTo Handler Throw New DivideByZeroException() Handler: If (TypeOf Err. el lenguaje incluye la instrucción Throw. que es la instancia de excepción que se va a desencadenar.

ByVal Var2 As Object) On Error GoTo ErrorHandler ' Insert code that might generate an error here Exit Sub ErrorHandler: ' Insert code to handle the error here Resume Next End Sub Aquí.No especifica la línea -1 en el inicio del código de control de errores. cómo configurarlas y si la aplicación host puede crear clases.Number = vbObjectError + 1052 Precaución Los errores del sistema que se producen durante las llamadas a bibliotecas de vínculos dinámicos (DLL) de Windows no provocan excepciones y no se pueden interceptar con el mecanismo de interceptación de errores de Visual Basic. Exit Function o Exit Property inmediatamente antes de la rutina de control de errores. asigne los códigos de error de Err. el código de control de errores sigue a la instrucción Exit Sub y precede a la instrucción End Sub para separarlo del flujo de instrucciones del procedimiento. a continuación.0. Errores no interceptados Los errores no interceptados que se producen en objetos se devuelven a la aplicación controladora cuando el objeto se ejecuta como un archivo ejecutable.En el entorno de desarrollo. si el código de error es 1052.Sin una instrucción On Error GoTo -1. como en el siguiente fragmento: VB Public Sub InitializeMatrix(ByVal Var1 As Object.Number a uno de sus errores y. asígnelo del siguiente modo: VB Err.Consulte la documentación de la aplicación host para obtener una descripción de qué opciones se deben configurar durante la depuración. un controlador de errores se deshabilita automáticamente cuando se sale de un procedimiento. devuélvalos al elemento que realizó la llamada al objeto. Si se crea un objeto que tiene acceso a otros objetos. Para impedir que el código de control de errores se ejecute cuando no se ha producido ningún error.El código de control de errores se puede colocar en cualquier lugar de un procedimiento. se debería intentar controlar cualquier error no controlado que devuelvan.Si no es posible.Debería especificar el error agregando el código de error a la constante VbObjectError.Al llamar a funciones de . aunque el procedimiento contenga una línea numerada con -1. coloque una instrucción Exit Sub. una instrucción se deshabilita automáticamente cuando se sale de un procedimiento.Por ejemplo. los errores no interceptados sólo se devuelven a la aplicación controladora si están configuradas las opciones apropiadas. On Error GoTo -1 On Error GoTo -1 deshabilita la excepción en el procedimiento actual.

se utiliza la instrucción On Error Resume Next para aplazar la interceptación de errores. el control se devuelve a la instrucción que produjo el error.Observe que Err.. z = x / y ' Creates a divide by zero error again If Err.La instrucción On Error GoTo 0 activa la interceptación de errores. Select Case Err. para cada valor devuelto. se debe comprobar.Number = 6 Then ' Tell user what happened. End Select Resume Next ' Resume execution at same line ' that caused the error.A continuación.Clear() ' Clear Err object fields. comprobar el valor de la propiedad LastDLLError del objeto Err. el intento de dividir entre cero genera el número de error 6. así se puede conocer el contexto para el error generado por la siguiente instrucción. Then clear the Err object.Number ' Evaluate error number.El error se administra en la rutina de control de errores y a continuación. VB Public Sub OnErrorDemo() On Error GoTo ErrorHandler ' Enable error-handling routine. ErrorHandler: ' Error-handling routine. si la llamada se ha realizado correctamente o si se ha producido algún error (según las especificaciones de la API) y.. En este ejemplo primero se utiliza la instrucción On Error GoTo para especificar la ubicación de una rutina de control de errores en un procedimiento. Dim Msg As String Msg = "There was an error attempting to divide by zero!" MsgBox(Msg. . End Sub .DLL.Clear se utiliza para borrar las propiedades del objeto Err una vez que se ha controlado el error. Case 6 ' Divide by zero error MsgBox("You attempted to divide by zero!") ' Insert code to handle this error Case Else ' Insert code to handle other situations here.En el ejemplo. "Divide by zero error") Err. On Error Resume Next ' Defer error trapping. en ese caso. Dim x As Integer = 32 Dim y As Integer = 0 Dim z As Integer z = x / y ' Creates a divide by zero error On Error GoTo 0 ' Turn off error trapping. End If Exit Sub ' Exit to avoid handler.