teclas - La detención de la ejecución de Macro de Excel al presionar Esc no funcionará
metodo onkey vba (9)
A veces, el conjunto de teclas correctas ( Pausa , Pausa o Desplazamiento) no están disponibles en el teclado (la mayoría de las veces ocurre con usuarios de computadoras portátiles) y presionar Esc 2, 3 o varias veces tampoco detiene la macro.
Me quedé atrapado también y finalmente encontré la solución en la función de accesibilidad de Windows, después de lo cual probé todas las opciones investigadas y 3 de ellas me funcionaron en 3 escenarios diferentes.
Paso # 01 : si su teclado no tiene una clave específica, no se preocupe y abra el ''Teclado OnScreen'' desde las Utilidades de Windows presionando Win + U.
Paso # 02 : Ahora, pruebe cualquiera de las opciones siguientes y definitivamente funcionará según la arquitectura de su sistema, es decir, el sistema operativo y la versión de Office.
- Ctrl + Pausa
- Ctrl + ScrLk
- Esc + Esc (Presionar dos veces consecutivamente)
Se lo pondrá en modo de interrupción utilizando las combinaciones de teclas anteriores, ya que la macro suspende la ejecución inmediatamente al finalizar la tarea actual. Por ej. si está extrayendo los datos de la web, se detendrá inmediatamente antes de ejecutar cualquier comando siguiente, pero después de extraer los datos, después de lo cual se puede presionar F5 o F8 para continuar con la depuración.
Estoy ejecutando excel 2007 en XP.
¿Hay alguna manera de evitar que una macro se ejecute durante su ejecución, además de presionar escape? Por lo general, si creo que he creado un bucle infinate o he estropeado algo, presiono el botón de escape y arroja un error, pero la macro se detiene.
Esta vez (y lo he hecho antes, pero no tan mal), configuré un msgbox para una depuración rápida. Resulta que tuvo que repetirse unas 6000 veces, lo que significa que tuve que "aceptar" 6000 buzones de mensajes, lo que demoró varios minutos. No guardé antes de ejecutar (otro error) por lo que no pude abrir el administrador de tareas para salir.
¿Hay alguna otra forma de detener la ejecución de una macro en caso de que me equivoque nuevamente?
CTRL + SCR LK (Bloq Despl) funcionó para mí.
He descubierto que a veces cuando abro una segunda ventana de Excel y ejecuto una macro en esa segunda ventana, la ejecución de la primera se detiene. No sé por qué no funciona todo el tiempo, pero puedes intentarlo.
Mi pequeña sugerencia retrospectiva es insertar un Stop después de cada Msgbox que utilizas en la depuración. Si escribe para un Msgbox que devuelve una respuesta (p. Ej., VbOk, VbCancel), también agregue una declaración Stop a cada uno. Extraiga las declaraciones de parada cuando todo sea perfecto.
Olvidé comentar una línea con un MsgBox antes de ejecutar mi macro. Lo que significa que tendría que hacer clic en Aceptar más de cien mil veces. La tecla ESC acababa de salir del cuadro de mensaje pero no detenía la ejecución de la macro. Manteniendo presionada la tecla ESC por unos segundos me ayudó a detener la ejecución del código.
Puede detener una macro presionando ctrl + break, pero si no tiene la tecla break , puede usar este código de autohotkey (código abierto):
+ ESC :: SendInput {CtrlBreak} return
Presionar shift + Escape será como presionar ctrl + break y así se detendrá tu macro.
Toda la gloria de esta página
También me gusta usar MsgBox para la depuración, y me he encontrado con este mismo problema más de una vez. Ahora siempre agrego un botón Cancelar a la ventana emergente y salgo de la macro si se presiona Cancelar. Código de ejemplo:
If MsgBox("Debug message", vbOKCancel, "Debugging") = vbCancel Then Exit Sub
También puede intentar presionar la tecla "FN" o la tecla de función con el botón "Break" o con el botón "sys rq" - solicitud del sistema como esta - deben presionarse juntas y esto detiene cualquier macro en ejecución.
Use CRTL + BREAK para suspender la ejecución en cualquier punto. Se lo pondrá en modo de interrupción y puede presionar F5 para continuar la ejecución o F8 para ejecutar el código paso a paso en el depurador visual.
Por supuesto, esto solo funciona cuando no hay un cuadro de mensaje abierto, por lo que si su código de VBA abre cajas de mensajes constantemente por algún motivo, será un poco complicado presionar las teclas en el momento correcto.
Incluso puede editar la mayor parte del código mientras se está ejecutando.
Use Debug.Print
para imprimir mensajes en la ventana Inmediato en el editor de VBA, que es mucho más conveniente que MsgBox
.
Utilice breakpoints o la palabra clave Stop
para detener automáticamente la ejecución en áreas interesantes.
Puede usar Debug.Assert
para detener la ejecución condicionalmente .