【发布时间】:2017-09-12 14:13:06
【问题描述】:
我需要更新 4 个不同的工作簿,它们都从Bloomberg 收集数据。我尝试构建一个新的工作簿,它将自动打开它们,然后工作簿中的代码将被激活,因为只要工作簿打开,代码就会被激活。但是,我的宏同时打开所有工作簿,并且当它们同时打开时更新花费的时间太长。我尝试使用命令“doevents”和“Application.Wait (Now + TimeValue("0:03:30"))”,但是它们不起作用。我希望他们当时打开一个,然后让特定工作簿中的计算结束,然后再打开下一个工作簿。
这是我的代码:
Sub UpdateWorkbooks()
'Quick Financial Longer Series
Workbooks.Open ("G:\FONDS\Quick financials_Longer Series.xlsb")
Application.Wait (Now + TimeValue("0:03:30"))
'Quick Financial
Workbooks.Open ("G:\FONDS\Quick Financial\Auto\Quick financials.xlsb")
Application.Wait (Now + TimeValue("0:03:30"))
'Quick Intra Corr (SX5E)
Workbooks.Open ("G:\FONDS\Quick Financial\Auto\Quick Intra Corr(SX5E).xlsb")
Application.Wait (Now + TimeValue("0:03:30"))
'SPX Sector Correlation
Workbooks.Open ("G:\FONDS\SPX Sector Correlation.xlsb")
Application.Wait (Now + TimeValue("0:03:30"))
Workbooks("UpdateWorkbooks.xlsb").Close savechanges:=True
End Sub
【问题讨论】:
-
@danieltakeshi 不重复。这专门询问如何使excel打开工作簿,在所述打开的工作簿上执行代码,然后恢复代码。
TimeWait就是 OP 迄今为止所尝试的。 -
与其让工作簿通过其工作簿打开事件调用代码,不如通过主工作簿显式调用代码。这样,运行时将自动等待被调用进程完成后再继续。
-
所以我应该从我的“更新工作簿”模块中调用工作簿的不同代码,而不是让 vba 打开它们?
-
VBA 在单线程上运行,因此
Open将仅从目标工作簿返回一次Workbook_Open()。如果您想加快更新速度,请使用 shell:Shell "excel /e ""C:\files\workbook.xlsm"""或CreateObject("WScript.Shell")在单独的实例中打开每个工作簿。