我有一段代码,我想一个一个地展示和隐藏一些形状的物体,以便制作一个小动画。但是,当代码执行时,什么都不会发生,当代码停止运行时,所有的映像都会一次显示出来。
Sub test()
For i = 1 To 4
Sheets("Game").Shapes("North" & i).Visible = True
Sleep 500
'Sheets("Game").Shapes("North" & i).Visible = False
'by setting it to false i'd like to achieve the animation effect
Debug.Print i
DoEvents
Next i
End Sub发布于 2017-10-27 15:19:45
DoEvents允许其他代码(例如Excel自己的代码)运行和处理诸如用户单击另一个工作表(调用任何Worksheet.Change或Workbook.WorksheetChange处理程序).或者只是重新粉刷一下。
通过每个循环调用一次DoEvents,Excel没有机会在可见性切换之间重新绘制:它已经忙于运行您的循环了。
因此,您需要打开可见性,让Excel重新绘制(DoEvents),为您的动画延迟睡眠(500 on似乎有点慢),然后关闭可见性,让Excel重新绘制,即再次调用DoEvents。
如果Game工作表在ThisWorkbook中,那么我建议您给它一个CodeName --在Project中选择它,然后查看它的属性(F4),然后将它的(Name)改为GameSheet。
这为您提供了一个全局范围对象变量,这样您就不需要每次迭代两次取消对同一个工作表的引用--您甚至可以只取消引用它的Shapes集合一次:
Private Const ANIMATION_DELAY As Long = 100
Sub test()
With GameSheet.Shapes
For i = 1 To 4
Dim currentShape As Shape
Set currentShape = .Item("North" & i)
currentShape.Visible = True
DoEvents
Sleep ANIMATION_DELAY
currentShape.Visible = False
DoEvents
Debug.Print i
Next
End With
End Sub发布于 2017-10-27 15:17:11
在切换DoEvents和True之后,通过设置True和False修改了代码,现在它起作用了:
Sub test()
For i = 1 To 4
Sheets("Game").Shapes("North" & i).Visible = True
DoEvents
Sleep 100
Sheets("Game").Shapes("North" & i).Visible = False
DoEvents
'by setting it to false i'd like to achieve the animation effect
Debug.Print i
Next i
End Subhttps://stackoverflow.com/questions/46977676
复制相似问题