Esta respuesta no aborda el botón de depuración (que tendría que diseñar un formulario y utilizar los botones en que para hacer algo como el método en su next question). Pero soluciona esta parte:
ahora No quiero perder la comodidad del controlador predeterminado que también me indica la línea exacta donde ocurrió el error.
En primer lugar, supongo que no quiere esto en el código de producción; lo quiere para la depuración o para el código que usará personalmente. Uso un indicador de compilación para indicar la depuración; entonces, si estoy solucionando un problema de un programa, puedo encontrar fácilmente la línea que está causando el problema.
# Const IsDebug = True
Sub ProcA()
On Error Goto ErrorHandler
' Main code of proc
ExitHere:
On Error Resume Next
' Close objects and stuff here
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description, , ThisWorkbook.Name & ": ProcA"
#If IsDebug Then
Stop ' Used for troubleshooting - Then press F8 to step thru code
Resume ' Resume will take you to the line that errored out
#Else
Resume ExitHere ' Exit procedure during normal running
#End If
End Sub
Nota: la excepción a Resume
es si el error se produce en un sub-procedimiento sin una rutina de tratamiento de errores, entonces Resume
le llevará a la línea en este proc que llamó a la sub-procedimiento con el error. Pero aún puede entrar y salir del subprocedimiento, usando F8 hasta que se repita el error. Si el subprocedimiento es demasiado largo para hacer incluso eso tedioso, entonces su sub-procedimiento probablemente debería tener su propia rutina de manejo de errores.
Existen varias formas de hacerlo.A veces los programas más pequeños donde sé que voy a estar pasando a través de él de todos modos, cuando la solución de problemas, acabo de poner estas líneas justo después de la instrucción MsgBox:
Resume ExitHere ' Normally exits during production
Resume ' Never will get here
Exit Sub
Nunca se llega a la instrucción Resume, a menos que esté pisando y configurándolo como la próxima línea que se ejecutará, arrastrando el siguiente puntero a esa línea, o presionando CtrlF9 con el cursor en esa línea.
Aquí hay un artículo que amplía estos conceptos: Five tips for handling errors in VBA. Finalmente, si está usando VBA y aún no ha descubierto el sitio impresionante de Chip Pearson, tiene una página que explica Error Handling In VBA.
Sólo para mantener la enlaces apropiados ... esta pregunta continúa aquí: http://stackoverflow.com/questions/3929997/vba-how-to-make-the-current-cursor-in-vbe-jump-to-the-line-where- el último error/3930626 # 3930626 –