Excel VBA:屏幕在循环期间不刷新 [英] Excel VBA: Screen doesn't refresh during loop

查看:3
本文介绍了Excel VBA:屏幕在循环期间不刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我尝试添加DoEvents和ActiveWindow.SmallScroll之类的内容here,但似乎都不起作用。我有一种感觉,这个问题可能与我的电脑/设置/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

已附上示例工作簿。

推荐答案

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

这篇关于Excel VBA:屏幕在循环期间不刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆