发光图形公司 https://stackoverflow.com/users/4721565/lumigraphics提出了关于内存使用的一个很好的观点,应该考虑这一点。为了学习的目的,我将提出一个替代解决方案,它不需要任务调度程序,并且可以完全在显示工作簿中工作。
在 VB 编辑器中,添加这个新子例程
Public Sub RefreshDataEachHour()
Application.OnTime Now + TimeValue("01:00:00"), "Refresh_All"
End Sub
并将以下行添加到您的末尾Refresh_All
routine
Call RefreshDataEachHour
当。。。的时候Refresh_All
例程第一次运行时,它将调用这个新过程,然后等待一个小时,然后调用Refresh_All
。再次在结束时Refresh_All
它返回到这个存储过程,它将再次等待一个小时,然后调用Refresh_All
等。这将重复,直到退出 Excel 应用程序。
下面的这一部分超出了您的问题范围,但我觉得无论如何还是有必要提及。
基本上,Application.OnTime
安排任务在未来某个时间运行。您可能希望在某个时间点结束此计划任务。为此,您必须致电Application.OnTime
带参数的方法Schedule:=False
并且您必须在您第一次安排手术的确切时间通过Application.OnTime
call.
要处理这种情况,请声明一个全局变量(在所有子例程之外)并将该变量传递到一个将取消任务的新子例程中。
例如,您可以声明
Public RunWhen As Date
然后您可以将上述过程修改如下:
Public Sub RefreshDataEachHour()
RunWhen = Now + TimeValue("01:00:00")
Application.OnTime EarliestTime:=RunWhen,Procedure:="Refresh_All",Schedule:=True
End Sub
然后您可以添加另一个子例程来处理任务的取消,如下所示:
Public Sub CancelRefresh()
Application.OnTime EarliestTime:=RunWhen, Procedure:="Refresh_All", Schedule:=False
End Sub
每当你使用Call CancelRefresh
that should从队列中删除您的程序。