2012-03-06 2 views
6

У меня есть Do .. While loop, в котором две петли For .. вложены; первый цикл For .. подсчитывает от 1 до X, второй цикл отсчитывает от X до 1. Это в настоящее время повторяется до бесконечности.Excel VBA: выполнение кода прерывания (не путем нажатия «escape»)

Теперь я хочу, чтобы пользователь мог «прерывать» этот бесконечный цикл и что программа при прерывании цикла выполняет XYZ.

Я попытался использовать кнопку переключения в сочетании с циклом Do .. While, но в то время как вышеупомянутый цикл работает, вход не принимается. Состояние кнопки не изменяется при нажатии, если код запускает цикл.

Любые предложения приветствуются.

ответ

10

Ключ должен включать DoEvents в циклы. Это позволяет Excel обрабатывать такие вещи, как нажатие кнопки при запуске кода

Вот контур. Назначьте макрос ButtonClick кнопке. Main будет работать неопределенно до тех пор, пока не будет нажата кнопка.

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

Спасибо Крис, который работал как шарм! – Pieter

Смежные вопросы