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。