Se puede deshabilitar el editor de vba? O en su defecto los msjs de depuración?

¿Amigos cómo hago para que en caso de errores no salga la ventana de msg que dice "Depurar" que al presionarlo abre el editor vba? Me gustaria que si tiene un error se guarde una nota en una celda en una hoja del archivo solo para los errores de la macro.

1 Respuesta

Respuesta
1

Este es un ejemplo de como almacenar el numero de error en la hoja, primero te explico la macro funciona así, se generan al azar una serie de 100 números, los cuales pasan por un objeto Collection llamado únicos que filtra los duplicados sin la instrucción on error resume next la macro se detendría marcando un error 457 que en este caso significa que encontró un duplicado y me pediría depurar o finalizar el programa, con la instrucción para el manejo de error se salta el mensaje y captura el numero de error en la página 1 celda a1 y cada vez que encuentre más errores los ira capturando en la celda a2, a3, a4 y así sucesivamente, solo tienes que fijarte que línea te genera el error y poner la instrucción antes, la línea on error goto 0 es para poner err. Number en 0 y no se quede guardado en la memoria.

Sub filtra_duplicados()
Set h1 = Worksheets("hoja1")
Dim unicos As New Collection
For i = 1 To 100
    n = WorksheetFunction.RandBetween(1, 10)
    On Error Resume Next
    unicos.Add n, CStr(n)
    If Err.Number > 0 Then
        u = Range("a1").CurrentRegion.Rows.Count
        Range("a1").Rows(u + 1) = Err.Number
    End If
    On Error GoTo 0
Next i
End Sub

...y el código lo copio en workbook open o en la sheet?

Este código esta hecho para ser usado en un modulo standard y es solo un ejemplo de como saltarte el error y que no te aparezcan los mensajes de depuración

¿Y cómo lo activo si es un modulo estándar? Con "call filtra_duplicados" copiado en la acción "workbook open" por ejemplo...

Creo que no me explique bien lo que te pase no es para que lo integres tal cual a tu macro, es para que entiendas como funciona el manejo de errores, la única parte que vas a usar es el on error resume next y el on error goto 0 y lo que este entre esas dos líneas, este ejemplo es más claro

sub tu_macro

tu codigo

on error resume next

linea que da el error (amarilla)

if err.number>0 then 

guardar en hoja el error

endif

on error goto 0

end sub

Entiendo, en dado caso para usar esto tendría que copiarlo en todos los subcomandos de mi macro. Habría manera de generalizar la captura de errores de toda la macro en una hoja.?

Veo que no has probado la macro, si lo hicieras te darías cuenta de que la macro cada que sale un error lo captura en una hoja, lo que tienes que poner es una línea on error resume next por cada línea del programa que te genere error, se puede hacer desde el principio de la macro solo que no lo recomiendo porque te ocultara otro tipo de problemas.

If Err.Number > 0 Then
        u = Range("a1").CurrentRegion.Rows.Count
        Range("a1").Rows(u + 1) = Err.Number
    End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas