En ocasiones necesitamos parar o detener nuestras macros en ejecución...
Habitualmente las macros se pueden detener desde el código de la propia macro (End, Exit) o bien manualmente a veces presionando las teclas:
Esc
o quizá Ctrl+break/pause
Esto suele ser suficiente... aunque en ocasiones no es todo lo efectivo que desearíamos.
Hoy veremos cómo configurar nuestras macros para que en cualquier momento del proceso en ejecución de una primera macro, poder detenerla desde una segunda.
Para ello emplearemos la función DOEVENTS, sabiendo que DoEvents transfiere el control al sistema operativo.
DoEvents es útil principalmente para acciones sencillas como permitir a un usuario que cancele un proceso después de que se haya iniciado, ya que la tarea puede continuar completamente independiente de la aplicación y el sistema operativo se encarga de la 'multitarea' y el rebanado de tiempo.
OJO!!: No uses DoEvents si otras aplicaciones pueden interactuar con el procedimiento de manera imprevista durante el tiempo que ha producido la ejecución del control.
Para mostrar el caso insertaremos dos controles 'CommadButton' tipo ActiveX con el código adjunto.
Insertamos en la ventana de código de la hoja el siguiente código:
Podemos comprobar si lanzamos la primera macro con el CommandButton1 (Ejecutar), en cualquier momento podemos detenerla presionando el segundo CommandButton2 (Detener).
Importante la definición de nuestra variable ParadaEmergencia al principio de la ventana, no incluida en ninguno de los procedimientos... así nos aseguramos su uso compartido entre las dos macros.
[...]Quiero que mi macro mande a cerrar una macro de otro libro[...] |
Habitualmente las macros se pueden detener desde el código de la propia macro (End, Exit) o bien manualmente a veces presionando las teclas:
Esc
o quizá Ctrl+break/pause
Esto suele ser suficiente... aunque en ocasiones no es todo lo efectivo que desearíamos.
Hoy veremos cómo configurar nuestras macros para que en cualquier momento del proceso en ejecución de una primera macro, poder detenerla desde una segunda.
Para ello emplearemos la función DOEVENTS, sabiendo que DoEvents transfiere el control al sistema operativo.
DoEvents es útil principalmente para acciones sencillas como permitir a un usuario que cancele un proceso después de que se haya iniciado, ya que la tarea puede continuar completamente independiente de la aplicación y el sistema operativo se encarga de la 'multitarea' y el rebanado de tiempo.
OJO!!: No uses DoEvents si otras aplicaciones pueden interactuar con el procedimiento de manera imprevista durante el tiempo que ha producido la ejecución del control.
Para mostrar el caso insertaremos dos controles 'CommadButton' tipo ActiveX con el código adjunto.
Insertamos en la ventana de código de la hoja el siguiente código:
Dim ParadaEmergencia As Boolean Private Sub CommandButton1_Click() 'iniciamos con la variable a FALSE ParadaEmergencia = False 'lanzamos a modo de ejemplo un proceso largo For i = 1 To 50000 'reflejamos el dato en A1 Range("A1").Value = i 'Pasamos la ejecución de modo que el sistema operativo pueda procesar otros eventos. DoEvents 'y controlamos la posible salida el bucle con un Exit If ParadaEmergencia = True Then Exit For Next i End Sub Private Sub CommandButton2_Click() 'cambiamos el estado de la variable a TRUE ParadaEmergencia = True End Sub
Podemos comprobar si lanzamos la primera macro con el CommandButton1 (Ejecutar), en cualquier momento podemos detenerla presionando el segundo CommandButton2 (Detener).
Importante la definición de nuestra variable ParadaEmergencia al principio de la ventana, no incluida en ninguno de los procedimientos... así nos aseguramos su uso compartido entre las dos macros.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.