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

我有一个使用application.ontime的时间循环,每5分钟将一个工作簿的单元块复制粘贴到另一个工作簿。 有时它会复制和粘贴重复,使我怀疑它有多个运行的实例。 有没有办法阻止多个版本的同时运行? 还是有办法检查它在特定的时间运行(待定)有多less实例?

在我的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 

第二个问题:我不是特别明白它是如何工作在丰富的细节。 假设我在下午六点半开始实例…直到晚上九点,它才能正常工作,然后我开始得到重复。 当我打破VBA,我得到三个popup错误,而不是一个,确认有多个实例运行。 但是我不明白是什么原因导致它重复的? 难道是我昨天晚上9点开始application.ontime它重新启动?

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

 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