【发布时间】:2019-07-16 15:13:03
【问题描述】:
在我正在制作的 Excel 电子表格/VBA 脚本中,我需要从数据库中调用数据,并每 5 分钟刷新一次值。程序从按下按钮开始,并应持续运行,直到用户中断执行。我目前不确定如何在不暂停电子表格的情况下让 Excel/VBA“等待”5 分钟,并且理想情况下,不会导致计算效率低下。
我尝试过使用“Application.Wait”和“Sleep”功能,但在 5 分钟等待期间,这两个功能都会暂停电子表格。
我当前的解决方案是使用“While”循环,其中包含“DoEvents”,如下面的代码所示。这使得程序只运行“While”循环 5 分钟,并且由于“DoEvents”,它不会暂停电子表格。然而,虽然电子表格可用,但这在计算上效率低下,因为程序执行在技术上并未暂停,它只是连续运行“While”循环,并且可能最终使用我的程序的一些较慢的计算机可能会显着减慢通过这个。
我目前的解决方案如下:
Sub MainProgram()
'dimension variables, open database connection, etc.
Do While 1 < 2 'ad infinitum
'get database data, write to spreadsheet, etc.
WasteTime()
Loop
End Sub
Sub WasteTime()
EndTime = Now + TimeSerial(0,5,0)
While Now < EndTime
DoEvents
Wend
End Sub
如上所述,问题在于计算效率低下。在整个WasteTime 循环中,CPU 利用率相当高。所以我想知道,有没有什么办法可以在不暂停电子表格和不连续运行代码的情况下暂停脚本,从而给 CPU 带来负担?
【问题讨论】:
-
或许可以看看
Application.OnTime。 -
也许开启自动保存,并设置interval for that。然后添加一个刷新数据的
Workbook.BeforeSave事件? -
Application.OnTime 工作!谢谢大本!