2012-03-06 15 views
6

Tengo un bucle Do .. While en el que dos bucles For .. están anidados; el primer ciclo For .. cuenta de 1 a X, el segundo ciclo cuenta regresivamente de X a 1. Esto se repite actualmente ad infinitum.Excel VBA: ejecución de código de interrupción (no pulsando 'escape')

Ahora, quiero que el usuario pueda 'interrumpir' este ciclo infinito, y que el programa, al interrumpirse el ciclo, ejecute XYZ.

He intentado utilizar un botón de alternar en combinación con el bucle Do .. While, pero mientras se está ejecutando el bucle antes mencionado, no se acepta ninguna entrada. El estado del botón no cambia cuando se hace clic si el código está ejecutando el ciclo.

Cualquier sugerencia es muy apreciada.

Respuesta

10

La clave es incluir un DoEvents en los bucles. Esto permite que Excel procese cosas como un clic de botón mientras ejecuta el código

Aquí hay un resumen. Asignar macro ButtonClick al botón. Main se ejecutará indefinidamente hasta que se haga clic en el botón.

Option Explicit 
Dim bBreak As Boolean 

Sub ButtonClick() 
    bBreak = True 

End Sub 

Sub Main() 
    Dim X As Long 
    Dim i As Long 
    bBreak = False 

    Do While True 
     X = 1000 
     For i = 1 To X 
      If bBreak Then 
       Exit Do 
      End If 
      DoEvents 
     Next 

     For i = X To 1 Step -1 
      If bBreak Then 
       Exit Do 
      End If 
      DoEvents 
     Next 
    Loop 
    If bBreak Then XYZ 
End Sub 
+0

Gracias Chris, eso funcionó como un encanto! – Pieter