Curso Excel VBA y Macros – Cap. 25 – Implementar un Manejador de errores

<<CURSO COMPLETO EN YOUTUBE>>

Como desarrolladores de macros, realizamos aplicaciones de todo tipo, y tenemos la obligación tanto técnica como moral de desarrollar aplicaciones que funcionen de manera correcta. Y una manera de que nuestras aplicaciones funcionen bien, es manejar adecuadamente los errores que puedan suceder durante la ejecución.

En VBA podemos implementar un controlador de errores usando la instrucción ON ERROR GOTO, y lo podemos hacer de dos maneras:

  • En case de que suceda un error, mostramos un mensaje o ejecutamos instrucciones.
  • En caso de que suceda un error, seguimos con la ejecución de la macro.

Ver video Capítulo 25 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Sintaxis de la instrucción On Error

On Error GoTo línea (etiqueta)
[On Error Resume Next]**

Instrucciones

**[ On Error GoTo 0 ]

Exit Sub

Línea (etiqueta)

Instrucciones

Donde:

INSTRUCCIÓN

DESCRIPCIÓN

On Error GoTo línea

Lo usamos para que al momento de que se detecte algún error, pase el control a una línea o a una etiqueta.

On Error Resume Next

Si se detecta un error, se pasará el control a la siguiente línea, omitiendo el anterior.

On Error GoTo 0

La usamos para restablecer el objeto Error. Regularmente se una cuando utilizamos On Error Resume Next.

línea (etiqueta)

Es la línea de nuestra macro que será llamada al suceder un error

Instrucciones

En caso de que suceda un error, ejecutamos estas instrucciones

Exit Sub

Si usamos una etiqueta usamos Exit Sub para terminar la macr en caso de que no haya errores

Ejemplo básico de una manejador de errores

Antes de compartirles el código completo de la macro debemos tener en cuenta que la instrucción On Error debe de ir antes de la líneas o las líneas que comiencen a ejecutar alguna acción de la macro.Yo siempre la pongo después de la declaración de variables.

Al terminar las líneas de nuestra macro, será necesario usar Exit Sub, Exit Function o Exit Property, ya que se supone que después de estas líneas seguirá la etiqueta que hemos definido para el manejo de error.

A continuación vemos la estructura de una macro con una manejador de error:

Sub MacroPrueba()

On Error GoTo Errores

'Aquí va el código
'de nuestra macro

'Damos por terminada nuestra macro
Exit Sub

'Esta etiqueta es la que nos permitirá
'asignar otro código para manera el error.
Errores:
'Podemos usar un MsgBox para mostrar un mensaje

End Sub

Los errores se almacenan en el objeto Err, por lo que podemos obtener el número de error con Err.Number o la descripción con Err.Description.

Macros de ejemplo

En esta macro cambiaremos el color de las etiquetas del archivo de ejemplo. Usaremos el bucle For Next para recorrer todas las hojas del archivo. En el momento en que no encuentre el nombre de la Hoja5, la macro deberá lanzar un error de Visual Basic.

El error que se lanzará es:

Se ha producido el error ‘9’ en tiempo de ejecución: Subíndice fuera del intervalo.

El error 9 nos indica que algún elemento de una matriz o una colección no existe o lo estamos llamando de manera incorrecta.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub SinManejadorDeErrores()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbRed
Next

End Sub

En la siguiente macro usaremos la instrucción On Error y en caso de que suceda un error, nos iremos a la etiqueta ManejadorErrores, la cual se escribirá con los puntos después de la etiqueta. En su defecto, en lugar de un nombre de etiqueta, podemos utilizar un número de línea.

Evaluaremos el número de error usando el objeto Err con la propiedad Number:

  • Si es error 9, subíndice fuera del intervalo, quiere decir que la hoja no existe.
  • Si es error 1004, error definido por la aplicación, puede ser que el archivo esté protegido (Revisar > Proteger libro).
Sub ConManejadorDeErrores()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

On Error GoTo ManejadorErrores

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbBlue
Next

Exit Sub

ManejadorErrores:

    If Err.Number = 9 Then
        MsgBox Err.Number & " " & Err.Description
        MsgBox Nombre & " no existe"
    ElseIf Err.Number = 1004 Then
        MsgBox Err.Number & " " & Err.Description
        MsgBox "Revise que el archivo no esté protegido."
    Else
        MsgBox Err.Number & " " & Err.Description
    End If

End Sub

Ahora bien, en caso de que suceda un error, podemos indicarle a la macro que siga con la ejecución de la siguiente instrucción. Esto se logra usando On Error Resume Next.

Sub ContinuarEnCasoDeError()

Dim i As Byte
Dim CantidadHojas As Byte
Dim Nombre As String

On Error Resume Next

CantidadHojas = Application.ThisWorkbook.Sheets.Count

For i = 1 To CantidadHojas
    Nombre = "Hoja" & i
    Sheets(Nombre).Tab.Color = VBA.vbRed
Next

On Error GoTo 0

End Sub

Descarga el archivo de ejemplo

025 – Implementar un Manejador de errores.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

También te podría gustar...