如何在VB脚本中设置延迟以使Excel更新数据

时间:2013-05-23 15:03:11

标签: excel-vba vbscript database-connection updates vba

我有一个Excel文件,可以自动从外部数据库加载数据(通过数据连接到Accesss数据库,而Accesss数据库又链接到Sharepoint表)。我需要自动化以下过程:

  • 打开Excel文件
  • 等待数据刷新
  • 运行宏(在此文件中)
  • 关闭文件

我的脚本是:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("excel spreadsheet.xlsm")
WScript.Sleep 1000 * 60 * 5
objExcel.Run "macro_name"
objWorkbook.close False
objExcel.Application.Quit

但是,无论我在WScript.sleep中设置了什么延迟,它都不会更新数据;相反,它在电子表格中已有的数据上运行宏。请有人帮帮忙!


最后(并且有几天的好处和现场测试),以下似乎是最干净和最有效的:

  1. 删除" WScript.Sleep 1000 * 60 * 5"来自VB脚本的行
  2. 在Excel中,清除"启用后台刷新"每个连接的属性中的复选框
  3. 在主代码

    之前将以下行添加到宏中

    ActiveWorkbook.RefreshAll

  4. 非常感谢Philip和Santosh的回答,指出了我正确的方向!

2 个答案:

答案 0 :(得分:3)

对于Excel-VBA,您可以使用以下任何一种方法暂停代码。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

OR

Private Sub delay(seconds As Long)
    Dim endTime As Date
    endTime = DateAdd("s", seconds, Now())
    Do While Now() < endTime
        DoEvents
    Loop
End Sub

Application.Wait (Now() + TimeSerial(0, 0, 5))

<小时/> 示例代码 (将暂停10秒)

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("excel spreadsheet.xlsm")
objExcel.Wait (Now + TimeSerial(0, 0,10))
objExcel.Run "macro_name"
objWorkbook.close False
objExcel.Application.Quit

答案 1 :(得分:0)

在工作簿中,您需要在运行代码之前刷新QueryTables中的数据。

为什么不在excel vba宏的开头调用查询表上的Refresh方法?