Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:VBA和refreshall结束消息?_Excel_Vba_Time - Fatal编程技术网

Excel:VBA和refreshall结束消息?

Excel:VBA和refreshall结束消息?,excel,vba,time,Excel,Vba,Time,这是Excel2003。 我想知道外部查询需要多长时间才能完成,然后用该ET更新电子表格中的单元格。我有以下几点,但它不起作用,因为ET只需要启动刷新所需的时间: Sub Refresh() Dim StartTime, EndTime, ET StartTime = Timer ActiveWorkbook.RefreshAll EndTime = Timer ET = Format(EndTime - StartTime, "Fixed")

这是Excel2003。 我想知道外部查询需要多长时间才能完成,然后用该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”


谢谢

我想您需要使用AfterRefresh事件。
这是一个有快乐结局和例子的论坛讨论

粘贴参考页面中的示例,仅用于链接独立性(您应该添加计时器存储和算法):

此代码在一个模块上:

此代码位于类模块上:


我想您需要使用AfterRefresh事件。
这是一个有快乐结局和例子的论坛讨论

粘贴参考页面中的示例,仅用于链接独立性(您应该添加计时器存储和算法):

此代码在一个模块上:

此代码位于类模块上:

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