2010-08-27 37 views
1

這是Excel 2003. 我想知道需要多長時間才能完成外部查詢,然後使用該ET更新電子表格中的單元格。我有以下,但它不工作,因爲ET長達只需要啓動刷新:Excel:VBA和refreshall結束的消息?

Sub Refresh() 
    Dim StartTime, EndTime, ET 

    StartTime = Timer 
    ActiveWorkbook.RefreshAll 
    EndTime = Timer 
    ET = Format(EndTime - StartTime, "Fixed") 
    Range("H27").Value = ET 
    MsgBox (ET) 
End Sub 

所以ET爲約1秒,即使數據讀取需要一個良好的10分鐘。

簡單的解決方法是將背景刷新設置爲false,但是這會阻止整個應用程序並使生活很長時間很悲慘。

是否有某種信號或異常,我可以在VBA中捕捉到,表明「哦,後臺刷新已完成;現在您可以停止計時器並計算ET了」?

謝謝!

回答

1

我想你需要使用AfterRefresh事件。
Here是一個論壇討論與一個幸福的結局和例子。

粘貼的例子來自簡稱頁面,只是鏈接獨立(你應該添加您的計時器存儲和算術):

此代碼那張模塊:

Dim X As New Class1 
Sub Initialize_It() 
    Application.DisplayAlerts = False 
    Application.ScreenUpdating = True 
    diropen = "C:\Desktop\" 

    Workbooks.Open diropen & "Test.xls" , UpdateLinks:=0 

    Set X.qt = Workbooks("Test.xls").Sheets("Sheet1").QueryTables(1) 
    ActiveWorkbook.RefreshAll 

End Sub 

此代碼繼續上課模塊:

Public WithEvents qt As QueryTable 
Private Sub qt_AfterRefresh(ByVal Success As Boolean) 
' Declare variables. 
Dim a As Integer 
Dim My_Prompt As String 

' Initialize prompt text for message box. 
My_Prompt = "Data refreshed or canceled." 

' Displays message box before refresh (or cancel) occurs. 
MsgBox My_Prompt 

ActiveWorkbook.Save 
Workbooks("Test.xls").Close 

End Sub