Здравствуйте,
подскажите пожалуйста как написать макрос, который реализовывал бы длительный цикл (например полчаса), забирая данные из файла и обрабатывая их с перерывом в 30 секунд (Sleep 30000 или Application.Wait ... ), но при этом у пользователя была бы возможность выполнять действия с некоторыми ячейками. Сейчас, когда макрос выполняется - над экселем горит курсор, что приложение занято,
спасибо.
icebear, попробуйте использовать "Application.OnTime":
Код:
' Глобальная переменная для отключения таймера.
Public dateTime As Date
Sub pTimerOn()
' Включение таймера.
dateTime = Now + TimeValue("00:00:10")
Application.OnTime EarliestTime:=dateTime, Procedure:="Module1.Макрос1"
End Sub
Sub pTimerOff()
' Отключение таймера.
' Обработчик ошибки, если таймер уже отключен.
On Error Resume Next
Application.OnTime EarliestTime:=dateTime, Procedure:="Module1.Макрос1", Schedule:=False
On Error GoTo 0
End Sub
Sub Макрос1()
' Функционал.
MsgBox "Макрос1"
' Включение таймера.
Call pTimerOn
End Sub
Чтобы протестировать код:
- запустите или процедуру pTimerOn, или Макрос1. Через 10 секунд появится сообщение (MsgBox);
- чтобы отключить таймер, запустите процедуру pTimerOff.
Если таймер относится к какому-то конкретному файлу и не должен работать, когда файл будет закрыт, то нужно отключить таймер после закрытия файла, иначе таймер запустится, не смотря на то, что файл закрыт.
Спасибо большое за ответ.