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
25/07/2018 a las 9:25 am
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.
26/03/2020 a las 10:53 am
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
04/08/2019 a las 12:16 pm
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
02/05/2020 a las 8:32 pm
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!
04/09/2020 a las 4:20 pm
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
30/09/2020 a las 7:09 pm
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
02/11/2022 a las 8:59 am
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.