Выполнение макроса каждые 15 минут

Тони интересуется, есть ли способ автоматически запускать макрос каждые 15 минут. Он хотел бы сделать это, не влияя на другие операции в Excel, то есть он не хочет зависать в цикле в ожидании определенного времени.

Ключ к выполнению этого типа операции – это используйте метод .OnTime; он позволяет запускать конкретный макрос через определенный период времени. Так, например, предположим, что вы хотите запускать макрос под названием «MyMacro» каждые 15 минут. Вы можете добиться этого, просто используя следующий однострочный макрос:

 Sub StartTimer () Application.OnTime Now () + TimeValue ("00:15:00"), "MyMacro" End Sub  

Ровно через 15 минут после выполнения этого макроса макрос MyMacro будет автоматически выполнен, независимо от того, что вы делаете в другом месте в Excel. Когда время, указанное для метода .OnTime, истечет и MyMacro будет запущен, MyMacro не будет запускаться снова до тех пор, пока вы снова не запустите макрос StartTimer и снова не вызовет .OnTime. Все это означает, что вы можете вызвать StartTimer либо из первой строки MyMacro, либо из последней строки, в зависимости от того, когда вы хотите перезапустить таймер.

При желании вы могли бы, немного измените StartTimer, чтобы разрешить передачу параметра, следующим образом:

 Sub StartTimer (dMinutes As Double) Dim dAdjust As Double dAdjust = Now () + (dMinutes/(24 * 60  )) Application.OnTime dAdjust, "MyMacro" End Sub 

Этот подход обеспечивает немного большую гибкость, поскольку вы можете передать StartTimer количество минут, которое вы хотите использовать с методом .OnTime. Например, если вы хотите запустить MyMacro через 12,5 минут, вы можете добавить следующую строку в существующий код:

 Call StartTimer (12.5) 

Если вы добавите такую ​​строку в вашем коде MyMacro, то MyMacro будет запускаться каждые 12,5 минут навсегда, пока работает Excel. Если вы хотите остановить таймер и не хотите останавливать Excel, вам нужно будет внести несколько изменений в настройку макроса:

 Public dTimeStore As DoubleSub StartTimer (dMinutes As Double)  dTimeStore = Now () + (dMinutes/(24 * 60)) Application.OnTime dTimeStore, «MyMacro» End Sub 
 Sub EndTimer () Application.OnTime dTimeStore, «MyMacro»,, FalseEnd Sub  

Обратите внимание на объявление переменной dTimeStore, которая используется для хранения последнего времени, использованного с методом .OnTime. Это позволяет вам в какой-то момент вызвать макрос EndTimer и, в свою очередь, метод .OnTime должным образом, чтобы выключить таймер. Также обратите внимание на наличие в макросе EndTimer двух последовательных запятых при вызове .OnTime. Это необходимо для того, чтобы убедиться, что параметры находятся в нужном месте, как того требует метод.

Оцените статью
Frestage.ru
Добавить комментарий