我试图在非常短的时间间隔内运行某个宏,例如每秒,从某个时间点到某个结束时间点。这意味着我需要一个起点和一个截止点。我无法使用Workbook_Open() Event
,因为我已经在打开工作簿后的不同时间触发了其他宏。
我用来每秒触发一次宏的基本行是这个伪代码:
Application.OnTime Now + TimeValue("00:00:01"), "Path to Macro"
从我的实验到目前为止,我所做的任何尝试都以两个结果结束。在第一种情况下,它从我打开工作簿的那一刻开始,并以适当的时间表每秒运行一次。但是,第一种情况并不理想,因为我需要它在启动之前稍等一下。在第二种情况下,它在我希望它开始时运行 - 但它只运行一次,这也不是我想要发生的。
总结:
我需要类似代码行的东西才能在工作簿打开后15分钟开始运行,并在3小时后停止运行。
答案 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
你可以在这个上设计出比我更好的设计。