我有一个Excel文件,可以自动从外部数据库加载数据(通过数据连接到Accesss数据库,而Accesss数据库又链接到Sharepoint表)。我需要自动化以下过程:
我的脚本是:
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中设置了什么延迟,它都不会更新数据;相反,它在电子表格中已有的数据上运行宏。请有人帮帮忙!
解
最后(并且有几天的好处和现场测试),以下似乎是最干净和最有效的:
在主代码
之前将以下行添加到宏中ActiveWorkbook.RefreshAll
非常感谢Philip和Santosh的回答,指出了我正确的方向!
答案 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方法?