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

时间:2016-10-13 08:29:50

标签: excel vba loops refresh

我正在尝试使图像消失并在循环发生时重新出现。当我单步执行时,代码按预期工作,但是当我运行它时,屏幕不会更新,直到循环结束。

我尝试添加像DoEvents和ActiveWindow.SmallScroll这样的内容here,但似乎没有任何效果。我觉得这个问题可能与我的PC /设置/版本的Excel有关,并且循环可能适用于某些人的机器。如果您想尝试,我已上传sample file here

我的代码是:

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

附上示例工作簿。

1 个答案:

答案 0 :(得分:2)

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毫秒。即使刷新表单也需要更多时间。