Макрос как бесконечный цикл

Автор icebear, 13 декабря 2014, 16:48

icebear

Здравствуйте,

подскажите пожалуйста как написать макрос, который реализовывал бы длительный цикл (например полчаса), забирая данные из файла и обрабатывая их с перерывом в 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.

Если таймер относится к какому-то конкретному файлу и не должен работать, когда файл будет закрыт, то нужно отключить таймер после закрытия файла, иначе таймер запустится, не смотря на то, что файл закрыт.

icebear