让vba等待继续

时间:2017-09-12 14:13:07

标签: excel vba excel-vba

我需要更新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

1 个答案:

答案 0 :(得分:1)

application.calculationstate可能会有所帮助。将它包装在一个函数中,你甚至可以返回状态,并使用do to。不确定无限循环的可能性,因此建议也可以添加重试计数器。

 Select Case Application.CalculationState
    Case 0: strCalculationState = "Calculating"
    Case 1: strCalculationState = "Done"
    Case 2: strCalculationState = "Pending"
 End Select