Excel VBA:循环期间不刷新屏幕

我试图让一个图像消失,并重新出现,而一个循环正在发生。 代码按照预期的方式工作,但是当我运行它时,屏幕不会更新,直到循环结束。

我已经尝试添加像在这里find的DoEvents和ActiveWindow.SmallScroll的东西,但似乎没有任何工作。 我有一种感觉,这个问题可能与我的电脑/设置/版本的Excel有关,而且这个循环可能在一些人的机器上工作。 我已经在这里上传了一个示例文件,如果你想尝试。

我的代码是:

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub ToggleImage() For i = 1 To 20 Application.ScreenUpdating = True ActiveSheet.Shapes("Picture 1").Visible = False ActiveSheet.Shapes("Picture 2").Visible = True ActiveSheet.Shapes("Picture 1").Visible = True ActiveSheet.Shapes("Picture 2").Visible = False Sleep 50 Next End Sub 

附有示例工作簿。

DoEvents必须有时间做事件;-)。 所以如果你在睡觉之后再打一次就没用了。 它必须暂停期间工作。

以下应该工作:

 Sub ToggleImage() Dim dTime As Double For i = 1 To 20 'ActiveSheet.Range("a1").Value = i ActiveSheet.Shapes("Picture 1").Visible = False ActiveSheet.Shapes("Picture 2").Visible = True dTime = Time Do While Time < dTime + 1 / 24 / 60 / 60 / 2 DoEvents Loop ActiveSheet.Shapes("Picture 1").Visible = True ActiveSheet.Shapes("Picture 2").Visible = False dTime = Time Do While Time < dTime + 1 / 24 / 60 / 60 / 2 DoEvents Loop Next End Sub 

但是你将无法将停顿时间缩短到50毫秒。 即使刷新表会花费更多的时间。