Excel: VBA и обновить все законченное сообщение? - PullRequest
1 голос
/ 27 августа 2010

Это 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»?

Спасибо!

1 Ответ

1 голос
/ 27 августа 2010

Полагаю, вам нужно использовать событие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...