这是Excel 2003。 我想知道外部查询需要多长时间才能完成,然后使用该ET更新电子表格中的单元格。我有以下内容,但它不起作用,因为ET只是启动刷新所需的时间:
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”?
谢谢!
答案 0 :(得分: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