Страницы: 1
RSS
VBA. Запуск макроса который будет работать определенное время по длительности
 
Приветствую, друзья, помогите с макросом.
Необходимо чтобы запускался цикл и работал, к примеру, 5 минут, или 10, или сколько я укажу, а потом остановился.

Допустим у меня есть цикл, который выделяет ячейки
Код
Sub test()
Dim r As Range

Set r = Range("A1:A100")
For Each i In r
i.Select
Next

End Sub

Как сделал так, чтобы этот цикл запускался каждый раз заново на протяжении 5 минут, а как 5 минут пройдут- остановился?
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Чтобы запускать макрос каждые 5 минут, нужен макрос, который будет считать эти минуты. Т.е. постоянная работа макросов.
 
Для решения этой задачи я бы попробовал использовать функцию Timer, в двух переменных.
Одна фиксирует начало, другая обновляется в цикле. При каждом обороте цикла - сравниваем их и если разница больше, условно, 5 минут, то выходим из цикла и завершаем макрос.

*Это не запустит макрос. как подсказали выше, его запустит только другой макрос или пользователь.  
Изменено: Shama - 29.12.2020 13:36:42
Не перестаю удивляться возможностям excel и VBA.
 
vikttur, Shama, Спасибо!

Цитата
vikttur написал:
запускать макрос каждые 5 минут

Запускать то я его и руками могу, основная мысль в том, чтобы он работал заданное время. То есть, не запуск каждые 5 минут, а запустил я его 1 раз, а вот работает он по длительности 5 минут. То есть в течении 5 минут снова и снова прогоняет заданный цикл.
Изменено: Dyroff - 29.12.2020 13:49:33
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Ну все правильно, вы запустите его один раз. А дальше он сам будет работать через определенный цикл по времени. Здесь смотрите.
 
Цитата
Dyroff написал:
То есть в течении 5 минут снова и снова прогоняет заданный цикл.
А, ну тогда этот цикл заключить в другой - Do... loop. выход из которого также будет через сравнение двух таймеров.  
Не перестаю удивляться возможностям excel и VBA.
 
Андрей_26, Да, можно и такой подход использовать, в том числе. Спасибо.

Цитата
Shama написал:  Do... loop.
Угу, спасибо.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
В общем, сделал так:

Код
Sub test()
Dim StartTime
Set r = Range("A1:A100")
StartTime = Range("B2").Value' Время от которого будет производиться отчет времени
For Each i In r
Do Until Now = StartTime + TimeValue("00:00:30")
i.Select
Loop
Next
End Sub


Только время с которым сравниваюсь из ячейки беру
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff,
Код
Do Until Now = StartTime + TimeValue("00:00:30")  
Это может не наступить никогда.
Код
Do Until Now < StartTime + TimeValue("00:00:30")
Но чтоб не греть воздух
Код
Sub test()
Dim ChecktTime
Set r = Range("A1:A100")
CheckTime = Range("B2").Value+ TimeValue("00:00:30") ' Время от которого будет производиться отчет времени
For Each i In r
Do Until Now <ChecktTime
i.Select
Loop
Next
End Sub
Изменено: БМВ - 29.12.2020 16:51:15
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо, Михаил)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх