创建动画计数(Microsoft Excel)
Ray希望,如果可能的话,可以为单元格中的值设置“计数”动画。例如,在单元格B7中,他的值可能为23。他想在单元格E4中引用该值,并使单元格E4从0递增到23(0、1、2、3等),显示每个数字反过来。
在Excel中没有内置的方法可以执行此操作,但是您可以使用宏来执行动画。基本上,宏将需要找出单元格B7中的内容,然后使用For … Next循环逐步遍历介于0和B7中的值之间的值。在循环的每次迭代期间,E4中的值都会更改,并且会引入某种延迟。
宏的延迟部分实际上是提供改变宏工作方式的能力。必须延迟才能使动画看起来正常;没有它,E4中的数字将增加得太快。 Excel提供了一些方便的方法来实现延迟。例如,此宏示例依赖于Sleep函数:
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Private Sub Worksheet_Change(ByVal Target As Range) Dim n As Integer Const cellWatch As String = "$B$7" Const cellCount As String = "$E$4" Const msec As Long = 200 ' milliseconds If Target.Address = cellWatch Then Application.EnableEvents = False Range(cellCount).Show If IsNumeric(Target) Then For n = 0 To Target ' skipped if Target < 0 Range(cellCount) = n Sleep msec ' delay each increment Next n End If Range(cellCount) = Target Application.EnableEvents = True End If End Sub
该代码应添加到ThisWorksheet模块中,因为它旨在在每次工作表中发生更改时运行。该代码检查以查看要更改的单元格是否是目标单元格(B7)。如果是,那么它将在其中获取值并跳转到For … Next循环中,以更新单元格E4中的内容。在这种情况下,“睡眠”功能用于在每次E4更新之间延迟200毫秒。
如果您想要一个较短且不依赖于Worksheet_Change事件处理程序的宏,则可以考虑以下内容。它利用Wait方法在For … Next循环中暂停:
Sub CountUp() Dim J As Integer For J = 0 To Range("B7").Value Range("E4").Value = J Application.Wait (Now + TimeValue("0:00:01")) Next J Range("E4").Value = Range("B7").Value End Sub
此版本的宏会在每次更新单元格E4之间暂停一整秒。
每当您使用这样的宏来实现某种程度的延迟时,请记住您的工作表似乎响应较慢。这是因为存在这种延迟,但是单元格E4中的值太大。 (值越大,总延迟越长。)
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(13753)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。