Я использую DoEvents
для принудительного обновления индикатора прогресса в строке состояния (или в некоторой ячейке на листе), как в приведенном ниже примере кода. Но экран не обновляется, или перестает освежать в какой-то момент. Задача в конечном итоге завершается, но индикатор прогресса бесполезен.DoEvents не делает событий ... Почему?
Почему не будет DoEvents
«делать события»? Что еще я могу сделать, чтобы принудительно обновить экран?
Редактировать: Я использую Excel 2003 для Windows XP.
Это последующий до earlier question; спасибо Robert Mearns за его ответ и пример кода ниже.
Sub ProgressMeter()
Dim booStatusBarState As Boolean
Dim iMax As Integer
Dim i As Integer
iMax = 100
Application.ScreenUpdating = False
''//Turn off screen updating
booStatusBarState = Application.DisplayStatusBar
''//Get the statusbar display setting
Application.DisplayStatusBar = True
''//Make sure that the statusbar is visible
For i = 1 To iMax ''// imax is usually 30 or so
fractionDone = CDbl(i)/CDbl(iMax)
Application.StatusBar = Format(fractionDone, "0%") & " done..."
''// or, alternatively:
''// statusRange.value = Format(fractionDone, "0%") & " done..."
''// Some code.......
DoEvents
''//Yield Control
Next i
Application.DisplayStatusBar = booStatusBarState
''//Reset Status bar display setting
Application.StatusBar = False
''//Return control of the Status bar to Excel
Application.ScreenUpdating = True
''//Turn on screen updating
End Sub
Вы пробовали без 'Application.ScreenUpdating = false'? –
Любопытный ... он работает нормально (добавляет внутреннюю петлю на какое-то время) на моей машине ... –
Пожалуйста, опубликуйте версии Excel & OS –