Как создать макрос Excel, чтобы остановить другой макрос и повторно вызвать его? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть макрос в файле Excel, который непрерывно работает по таймеру в 30 секунд:

Sub autosync()

  Call syncSQL 'a sync function that copies data rows to database.
  Application.OnTime Now + TimeValue("00:00.30"), "Sheet7.autosync"

End Sub

Однако бывают случаи, когда возникают ошибки, которые останавливают таймер, поэтому я хочу создать кнопку, котораяне только возобновляет работу таймера, но также завершает работу старого таймера и заменяет его новым таймером.Это сделано для того, чтобы избежать одновременной работы нескольких таймеров.

Sub resetsync()

Application.OnTime Now + TimeValue("00:00:30"), "Sheet7.autosync", False    '1. Stops the current timer
Call autosync  '2. Call back the timer

End Sub

Однако, когда я тестирую кнопку, она игнорирует шаг 1 и переходит прямо к шагу 2, создавая 2 процесса автосинхронизации.Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я бы сделал это так

Option Explicit

Dim iTimerSet As Double

Public Sub StopTimer()

 On Error Resume Next ' Lazy programming
 Application.OnTime iTimerSet, "RunTimer", , False

End Sub

Public Sub RunTimer()

    ' Some Demo Code
    ' here you can put your code
    ' Call syncSQL
    MsgBox "Call syncSQL ", vbOKOnly, "Test"


    ' Code to start the timer
    ' example every 5 seconde
    iTimerSet = Now + TimeValue("00:00:05")
    Application.OnTime iTimerSet, "RunTimer"

End Sub
0 голосов
/ 02 октября 2018

Каждый раз, когда вы запускаете таймер, вам нужно сохранить запланированное время в переменной Gobal / Static: это значение, которое вам нужно использовать, когда вы хотите отменить тот же таймер.

См. Например: bettersolutions.com/vba/macros/application-ontime.htm

Dim exTime
Sub autosync()

  Call syncSQL 'a sync function that copies data rows to database.
  exTime = Now + TimeSerial(0, 0, 30)
  Application.OnTime exTime, "Sheet7.autosync"

End Sub


Sub resetsync()
    'EDIT - needs the "Schedule" parameter name...
    Application.OnTime exTime, "Sheet7.autosync", Schedule:=False '1. Stops the current timer
    Call autosync  '2. Call back the timer

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...