Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Control de errores en VBA

| 7 comentarios

On error es la instrucción que nos permitirá el control de los diversos errores que se pueden producir en las macros, vemos algunas de las posibles formas en las que puede ser empleado.

 

1) on erro goto etiqueta

Esta primera forma determina  a donde se va a producir el salto en el aplicativo si se llega a producir un erorr, se suele usar un nombre de etiqueta y volver a emplear el mismo nombre líneas después para delimitar el salto, también se puede emplear el número de línea en lugar de una etiqueta. Notemos en el ejemplo como al producirse un error no continúa la ejecución sino que se produce el salto.

 

Sub ejemplo1()

On Error GoTo salto

For i = 1 To 5
MsgBox Sheets(i).Name
MsgBox i
Next i

salto:

MsgBox "Finalizado"

End Sub

 

2) On error resume next

En  este caso al producirse el error este es omitido, y se pasa a la siguiente instrucción, notemos en el siguiente ejemplo que solo aparecen los nombres de las hojas disponibles, y en cambio el mensaje con la variable "i"  siempre se llega a mostrar.

Sub ejemploerror()

On Error Resume Next

For i = 1 To 5
MsgBox Sheets(i).Name
MsgBox i
Next i

End Sub

3) on error goto 0

En este caso la instrucción permite desactivar el control de errores que hayamos colocado con anterioridad, notemos en el ejemplo como se activa el control de errores, luego es desactivado, y producto de ello es que el error llega a aparecer en el momento en que se ejecuta la macro.

Sub ejemplo2()

On Error Resume Next
MsgBox "Inicio"
On Error GoTo 0

For i = 1 To 5
MsgBox Sheets(i).Name
MsgBox i
Next i

End Sub

7 comentarios

  1. Hola quisiera saber como controlo el siguiente error: tengo la funcion Application.WorksheetFunction.Match("Valor1", Range("F:F"), 0) si no encuentra el texto "Valor1" en el rango de la columna "F" me sale un error y quisiera que ignore este evento su ayuda, por favor.

    • 2) On error resume next

      En este caso al producirse el error este es omitido, y se pasa a la siguiente instrucción, notemos en el siguiente ejemplo que solo aparecen los nombres de las hojas disponibles, y en cambio el mensaje con la variable "i" siempre se llega a mostrar.

      Sub ejemploerror()

      On Error Resume Next

      For i = 1 To 5
      MsgBox Sheets(i).Name
      MsgBox i
      Next i

      End Sub

  2. Hola, tengo esta macro que al ejecutarla manda el error '2004', pero el manejador de errores no funciona y me manda el error del sistema, me podrían ayudar en saber qué pasa.
    De antemano gracias.

    Private Sub Carga_txts()
    Dim WsLayoutDatos As Worksheet
    Dim ValidaIdEmpresa As Variant
    Dim Rango As Range
    Dim UltimaFila As Long

    Application.ScreenUpdating = False

    ThisWorkbook.Activate
    Set WsLayoutDatos = ActiveWorkbook.Worksheets("LAYOUT DATOS")

    UltimaFila = Range("A" & Rows.Count).End(xlUp).Row

    Set Rango = WsLayoutDatos.Range("A2" & ":" & "K" & UltimaFila)

    On Error GoTo SiError:
    ValidaIdEmpresa = Application.WorksheetFunction.VLookup(CeldaIdEmpresa, Rango, 1, False)

    ErrorCargatxts = True

    Set WsLayoutDatos = Nothing
    Set Rango = Nothing

    Application.ScreenUpdating = True

    Exit Sub

    SiError:

    ErrorCargatxts = False

    End Sub

  3. Hola, quisiera saber como aplico un manejar de erroes (goto) dentro de una estructura Do while.
    Al parecer solo aqui me funciona la primera vez del bucle, las demas no.

    Gracias!

  4. Sub Refresh_Listbox()

    Dim Sh As Worksheet
    Set Sh = ThisWorkbook.Sheets("Data")

    Dim dsh As Worksheet
    Set dsh = ThisWorkbook.Sheets("Data_Display")

    'On Error Resume Next
    'Application.ScreenUpdating = False

    ''''''''''' Copy Data ''''''''''
    'dsh.Cells.Clear
    dsh.UsedRange.Clear

    Sh.AutoFilterMode = False

    'If Me.cmb_Filter_By.Value "ALL" Then

    'Sh.UsedRange.AutoFilter 4, ">10"
    Sh.UsedRange.AutoFilter Application.WorksheetFunction.Match(cmb_Filter_By.Value, Sh.Range("1:1"), 0), "*" & Me.txt_Search.Value & "*"
    'Sh.UsedRange.AutoFilter 2, "*" & Me.txt_Search.Value & "*", xlFilterValues

    'End If

    Sh.UsedRange.Copy dsh.Range("A1")

    Sh.AutoFilterMode = False

    Dim lr As Long
    lr = Application.WorksheetFunction.CountA(dsh.Range("A:A"))

    'If lr = 1 Then lr = 2

    With Me.ListBox1
    .ColumnHeads = True
    .ColumnCount = 17
    .ColumnWidths = "20,250"
    .RowSource = "Data_Display!A2:Q" & lr
    End With

    Me.Label18.Caption = Me.ListBox1.ListCount

    'Application.ScreenUpdating = True
    End Sub

  5. Hola me ayudaría en poder resolver un error

    Aparece lo siguiente.

    "Ten cuidado: es posible que algunas partes de tu documento incluya información personal que el inspector de documentos no puede quitar"

    Q debo hacer Y me aparece en la macro de Excel

  6. Buenos días, quisiera saber como podría guardar una archivo de texto o similar a modo de reporte de los errores que se podrían generar en una macro en exel.

    Quiero decir, por ejemplo si al ejecutar la macro, me lanza algún error, este se guarde automaticamente en un archivo a modo de Log de errores.

    Gracias.

Deja una respuesta

Los campos requeridos estan marcados con *.