Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: icebear от 13 декабря 2014, 16:48

Название: Макрос как бесконечный цикл
Отправлено: icebear от 13 декабря 2014, 16:48
Здравствуйте,

подскажите пожалуйста как написать макрос, который реализовывал бы длительный цикл (например полчаса), забирая данные из файла и обрабатывая их с перерывом в 30 секунд (Sleep 30000 или Application.Wait ... ), но при этом у пользователя была бы возможность выполнять действия с некоторыми ячейками.  Сейчас, когда макрос выполняется - над экселем горит курсор, что приложение занято,

спасибо.
Название: Re: Макрос как бесконечный цикл
Отправлено: Администратор от 13 декабря 2014, 18:07
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
[свернуть]

Чтобы протестировать код:

Если таймер относится к какому-то конкретному файлу и не должен работать, когда файл будет закрыт, то нужно отключить таймер после закрытия файла, иначе таймер запустится, не смотря на то, что файл закрыт.
Название: Re: Макрос как бесконечный цикл
Отправлено: icebear от 14 декабря 2014, 14:22
Спасибо большое за ответ.