2017-10-17 17 views
0

他のワークブックとそのマクロを呼び出すために使用するワークブックを作成しました。私はボタンにサブ "ナップ"を割り当てました。私は、更新が必要なときはいつでも押すでしょう。しかし、ボタンを押してブックを開き、マクロを呼び出すと、vbaは特定のワークブックの計算が完了するのを待たずに続行し、次のワークブックのオープンを開始します。私はコマンドApplication.waitを使用しようとしましたが、動作しないようです。それは待つことになるが、平均時間のバックグラウンドでは計算されない。複数のサブを一度に1つずつ実行する

Sub Knap() 

Call LongerSeries 
Application.Wait (Now + TimeValue("00:03:00")) 
Call QuickCorrelation 
Application.Wait (Now + TimeValue("00:03:00")) 
Call SPX 

End Sub 

Sub LongerSeries() 

Workbooks.Open ("G:\FONDS\Quick financials_Longer Series (2).xlsb") 
Application.Run "RefreshData" 

End Sub 

Sub QuickCorrelation() 

Workbooks.Open ("G:\FONDS\Quick correlation_1.xlsb") 
Application.Run "RefreshData" 

End Sub 

Sub SPX() 

Workbooks.Open ("G:\FONDS\Quick Intra Corr (SPX)_1.xlsb") 
Application.Run "RefreshData" 

End Sub 
+0

VBAコードに 'Calculate'を書くことで計算を強制することができます。その後、それは待つだろう。 – Vityata

+0

サブの "knap" inbetweenの中でsubsを呼び出していますか? –

答えて

0

アレイを試しましたか?

Sub Knap() 

Dim MyWorksheets() 

MyWorksheets = Array("LongerSeries", "QuickCorrelation", "SPX") 

For Each mw in MyWorksheets 
    If mw = "LongerSeries" then 
     Call LongerSeries 
    ElseIf mw = "QuickCorrelation" Then 
     Call QuickCorrelation 
    ElseIf mw = "SPX" Then 
     Call SPX 
    Else 
    End If   
Next  
End Sub 

Sub LongerSeries() 

Workbooks.Open ("G:\FONDS\Quick financials_Longer Series (2).xlsb") 
Application.Run "RefreshData" 
Application.Calculate 
If Not Application.CalculationState = xlDone Then 
    DoEvents 
End If 

End Sub 

Sub QuickCorrelation() 

Workbooks.Open ("G:\FONDS\Quick correlation_1.xlsb") 
Application.Run "RefreshData" 
If Not Application.CalculationState = xlDone Then 
    DoEvents 
End If 

End Sub 

Sub SPX() 

Workbooks.Open ("G:\FONDS\Quick Intra Corr (SPX)_1.xlsb") 
Application.Run "RefreshData" 
If Not Application.CalculationState = xlDone Then 
    DoEvents 
End If 

End Sub 

これが役に立ちます。

+0

"プロジェクトやライブラリが見つかりません –

+0

スクリプトを更新しました...しかし、これら3つの行をそれぞれのサブシテムに追加するとどうなりますか?If Not Application.CalculationState = xlDone Then DoEvents End If ' – hod

+0

私はvarialbe mwを宣言しています。 "Dim mw in variant"。ありがとうございました! –

0

このようにしてみてください。

Sub LongerSeries() 
    Workbooks.Open ("G:\FONDS\Quick financials_Longer Series (2).xlsb") 
    Application.Calculate 
    Application.Run "RefreshData" 
End Sub 

それはすべて開いたワークブックにclaculationを強制します。 See more about Calculate here

+0

しかし、 "Application.run" Refreshdata "はブルームバーグのデータをインポートして更新するサブを指します。ブルームバーグの追加は2分かかりますが、計算は含まれていません –

関連する問題