【发布时间】:2010-10-05 12:36:18
【问题描述】:
我正在使用DoEvents 来强制更新状态栏(或工作表中的某些单元格)中的进度指示器,如下面的示例代码所示。但是屏幕不刷新,或者在某些时候停止刷新。任务最终完成,但进度条无用。
DoEvents 为什么不“做事件”?我还能做些什么来强制屏幕更新?
编辑:我在 Windows XP 上使用 Excel 2003。
这是对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 和操作系统版本