Excel VBA:Application.OnTime未正确执行

时间:2010-04-15 15:25:22

标签: excel-vba timer ontime vba excel

我试图在非常短的时间间隔内运行某个宏,例如每秒,从某个时间点到某个结束时间点。这意味着我需要一个起点和一个截止点。我无法使用Workbook_Open() Event,因为我已经在打开工作簿后的不同时间触发了其他宏。

我用来每秒触发一次宏的基本行是这个伪代码:

Application.OnTime Now + TimeValue("00:00:01"), "Path to Macro"

从我的实验到目前为止,我所做的任何尝试都以两个结果结束。在第一种情况下,它从我打开工作簿的那一刻开始,并以适当的时间表每秒运行一次。但是,第一种情况并不理想,因为我需要它在启动之前稍等一下。在第二种情况下,它在我希望它开始时运行 - 但它只运行一次,这也不是我想要发生的。

总结:

我需要类似代码行的东西才能在工作簿打开后15分钟开始运行,并在3小时后停止运行。

1 个答案:

答案 0 :(得分:1)

还有哪些其他定时宏从workbook_open启动,为什么这些宏会干扰?听起来你不必要地限制自己。以下是解决此问题的方法:

Workbook_open应该使用application.ontime来调用一般函数do_timed_events。 do_timed_events函数应该在每次运行时使用application.ontime重新添加自己。它还应该跟踪状态。对于它的前几次运行,它应该执行其他特定任务,然后等待15米,然后开始执行每秒任务。

这是一些伪代码:

private var do_timed_events_state as string
sub do_timed_events
   if do_timed_events_state = "" then
      do_task_1(arg1,arg2)
      do_timed_events_state = "task_2"
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   elseif do_timed_events_state = "task_2" then
      do_timed_events_state = "repeating_task"
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   elseif do_timed_events_state = "repeating_task" then
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   end if
end sub

你可以在这个上设计出比我更好的设计。