如何控制VBA只允许运行1个application.ontime实例

时间:2016-10-26 03:33:29

标签: excel vba excel-vba

我有一个使用application.ontime的时间循环,它每5分钟将一个工作簿中的单元格块复制并粘贴到另一个工作簿。它会不时地复制和粘贴重复项,让我怀疑它有多个实例正在运行。有没有办法防止它的多个版本一次运行?或者有没有办法检查在特定时间运行(待定)的实例数?

到目前为止,我在application.ontime中的内容如下:

Sub timer()

    If Hour(Time) <= 16 Or Hour(Time) >= 18 Then

        Application.OnTime TimeSerial(Hour(Time), Application.WorksheetFunction.Floor(Minute(Time), 5), 0) + TimeValue("00:05:00"), "dataextract", , True

    End If


End Sub

次要问题:我并不特别了解它的工作原理。假设我在下午6:30开始实例...它工作正常,直到晚上9点,然后我开始重复。当我打破VBA时,我得到三个弹出错误而不是一个,确认有多个实例正在运行。但是,我不明白可能导致它复制的原因是什么?可能是我昨天晚上9点启动了application.ontime并重新启动了吗?

1 个答案:

答案 0 :(得分:1)

您可以在创建下一个计划任务之前存储计划时间并取消上一个计划。

On Error Resume Next
Application.OnTime EarliestTime:=Range("NextSchedule"), Procedure:="dataextract", Schedule:=False
On Error GoTo 0

Range("NextSchedule") = TimeSerial(Hour(Now), Application.WorksheetFunction.Floor(Minute(Time), 5) + 5, 0)

Application.OnTime EarliestTime:=Range("NextSchedule"), Procedure:="dataextract", Schedule:=True