Можно ли в VBA прервать выполнения цикла. Цикл прерываться должен в результате действий пользователя, будь то нажатие кнопки на клавиатуре или кнопки на панели меню Exel.
Можно показать на этом примере
Sub TimeOut(ByVal relay As Long)
' пауза на relay секунд
Dim Start
Start = Timer
While Timer < Start + relay
'Тело цикла
Wend
End Sub
Заранее хочу извиниться, если напишу чушь, нет времени проверить.
А что, если relay сделать глобальной переменной, и при нажатии на кнопку присвоить ей "0". Т.е. она динамически поменяется и цикл (теоретически ) должен удачно завершиться при проверке условия.
Ну вот, попробовал - все получилось, только в теле цикла надо не забыть указать 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
Моя проблема заключалась в незнании оператора DoEvents. Я в хелпе его нашел чуть раньше чем стал получать ответы.
А цикл сделал примерно так же.
Public Flag AS Boolean
в продцедуре
Flag = True
While Flag
' тело цикла
DoEvents
Wend
Для пользователя органзовал кнопку с надписью "Стоп", при нажатии на которую вызавается подпрограмма в которой
Flag = False
Да, так красивее
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)