我需要更新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
答案 0 :(得分:1)
application.calculationstate
可能会有所帮助。将它包装在一个函数中,你甚至可以返回状态,并使用do to。不确定无限循环的可能性,因此建议也可以添加重试计数器。
Select Case Application.CalculationState
Case 0: strCalculationState = "Calculating"
Case 1: strCalculationState = "Done"
Case 2: strCalculationState = "Pending"
End Select