猿问

请问如何在Excel VBA中强制屏幕更新

我的Excel工具执行的任务很长,我正在尝试通过在状态栏中或工作表中某些单元格中提供进度报告来对用户友好,如下所示。但是屏幕不刷新,或在某个时候停止刷新(例如33%)。任务最终完成,但是进度栏没有用。


我该怎么做才能强制更新屏幕?


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.......


Next i

我正在使用Excel 2003。


幕布斯6054654
浏览 1291回答 3
3回答

温温酱

更改文本或格式后,有时工作表中的文本框不会更新,甚至DoEvent命令也无济于事。由于Excel中没有命令以刷新用户表单的方式刷新工作表,因此有必要使用技巧来强制Excel更新屏幕。以下命令似乎可以解决问题:- ActiveSheet.Calculate    - ActiveWindow.SmallScroll    - Application.WindowState = Application.WindowState

守着星空守着你

具体来说,如果您正在处理UserForm,则可以尝试Repaint方法。如果您在表单中使用事件触发器,则可能会遇到DoEvents问题。例如,函数运行时按下的任何键都将由DoEvents发送。键盘输入将在屏幕更新之前进行处理,因此,如果要通过按住键盘上的箭头键之一来更改电子表格上的单元格,则单元格更改事件将在主功能完成之前继续触发。在某些情况下,不会刷新用户窗体,因为DoEvents会触发事件。但是,即使另一个事件紧接在前一个事件之后,Repaint也会更新UserForm,并且用户将在屏幕上看到更改。在UserForm代码中,它很简单:Me.Repaint
随时随地看视频慕课网APP
我要回答