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

时间:2019-07-16 15:13:03

标签: excel vba

在我制作的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负担?

1 个答案:

答案 0 :(得分:0)

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

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

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