gpt4 book ai didi

excel - 如何定期刷新Excel中的数据库数据?

转载 作者:行者123 更新时间:2023-12-04 20:52:01 25 4
gpt4 key购买 nike

在我正在制作的 Excel 电子表格/VBA 脚本中,我需要从数据库中调用数据,并每 5 分钟刷新一次值。程序从按下按钮开始,应该持续运行,直到用户中断执行。我目前不确定如何在不暂停电子表格的情况下让 Excel/VBA “等待” 5 分钟,并且理想情况下,不会导致计算效率低下。

我尝试使用“Application.Wait”和“Sleep”功能,但在 5 分钟等待期间,这两个功能都会暂停电子表格。

我当前的解决方案是使用其中包含“DoEvents”的“While”循环,如下面的代码所示。这使得程序只运行“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 带来负担?

最佳答案

正如 BigBen 在评论中提到的 Application.OnTime是最好的选择。它通过安排在将来调用第二个宏来避免您描述的开销。

下面是一个例子。您可以使用常量变量修改等待时间。这些应该在同一个模块中(或将 theCalculation 宏更改为非私有(private))。

Sub TheTimerMac()
'enter in timevalue (hour:Minute:Second)
Const DelayTime As String = "00:05:00"

Dim nextRunTime As Date
nextRunTime = Now + TimeValue(DelayTime)

'Schedules application to execute below macro at set time.
Application.OnTime nextRunTime, "TheCalculation"

End Sub



Private Sub TheCalculation()
'whatever you use for your calc here
Application.CalculateFull

'This will restart the timer portion.
Call TheTimerMac

End Sub

关于excel - 如何定期刷新Excel中的数据库数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com