Excel VBA: выполнение кода прерывания (без нажатия клавиши escape) - PullRequest
6 голосов
/ 06 марта 2012

У меня есть цикл Do .. while, в который вложены два цикла For ..первый цикл For .. считает от 1 до X, второй цикл - от X до 1. В настоящее время это повторяется до бесконечности.

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

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

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

1 Ответ

10 голосов
/ 06 марта 2012

Ключ должен включать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...