Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

WinCity.Ru _ Microsoft/Office Excel _ Можно ли в VBA прервать выполнения цикла.

Автор: avs Понедельник, 08 Июля 2002, 15:28

Можно ли в VBA прервать выполнения цикла. Цикл прерываться должен в результате действий пользователя, будь то нажатие кнопки на клавиатуре или кнопки на панели меню Exel.

Можно показать на этом примере
Sub TimeOut(ByVal relay As Long)
' пауза на relay секунд
Dim Start
Start = Timer
While Timer < Start + relay
'Тело цикла
Wend
End Sub

Автор: Dr. A Пятница, 12 Июля 2002, 23:51

Заранее хочу извиниться, если напишу чушь, нет времени проверить.
А что, если relay сделать глобальной переменной, и при нажатии на кнопку присвоить ей "0". Т.е. она динамически поменяется и цикл (теоретически smile.gif) должен удачно завершиться при проверке условия.

Автор: Dr. A Пятница, 12 Июля 2002, 14:07

Ну вот, попробовал - все получилось, только в теле цикла надо не забыть указать DoEvents, чтобы окошко (или что там) не подвисло в то время как цикл выполняется.
Иными словами:
В модуле:
Public relay as Long
В окошке с двумя кнопками и TextBox-ом:
Private Sub cmdStart_Click()

relay = 10
Dim Start
Start = Timer
While Timer < Start + relay
DoEvents
TextBox1.Text = Timer 'тело цикла
Wend

End Sub

Private Sub cmdStop_Click()
relay = 0
End Sub

Автор: avs Пятница, 12 Июля 2002, 20:05

Моя проблема заключалась в незнании оператора DoEvents. Я в хелпе его нашел чуть раньше чем стал получать ответы.
А цикл сделал примерно так же.
Public Flag AS Boolean

в продцедуре
Flag = True
While Flag
' тело цикла
DoEvents
Wend
Для пользователя органзовал кнопку с надписью "Стоп", при нажатии на которую вызавается подпрограмма в которой
Flag = False

Автор: Dr. A Пятница, 12 Июля 2002, 20:35

Да, так красивее wink.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)