克里斯正在开发一个Excel宏,该宏向用户显示一系列项目。他想在显示的每条信息之间的宏中引入一个延迟,例如一秒钟,他想知道是否存在一种简单的方法来添加这种延迟。

您可以通过几种方法在宏中引入延迟。传统方法是使用与Application对象一起使用的Wait方法。您可以通过这种方式使用它引入一秒钟的延迟:

Application.Wait (Now() + TimeValue("0:00:01"))

请注意,Wait方法所需的参数是您希望宏恢复运行的时间。换句话说,这是“等到”时间。这就是为什么上面的示例使用当前时间(通过Now函数)增加一秒的原因。

如果您不想使用Wait方法(出于某种原因),也可以使用循环来花费时间:

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

此方法的一种变体依赖于Timer函数,该函数返回自午夜以来的秒数:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

以这种方式使用循环时,如果仅延迟一秒钟,那么可能不会成为大问题。如果需要延迟更长的时间,则可能需要将DoEvents函数放入循环中:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

原因很简单-如果您不这样做,则Excel在循环中不会响应任何其他事件。这可能会使您的系统在等待时似乎已冻结或挂起。

如果您需要更多的延迟细节(低至毫秒级范围),则可能需要依靠Windows API中的Sleep函数。 (它不是VBA的一部分。)要使用它,您需要在任何过程之前的模块开头,声明区域中包括一个声明:

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

然后,可以在宏中以这种方式使用睡眠功能:

Sleep(1000)

这会使系统暂停1000毫秒,即1秒钟。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(5134)适用于Microsoft Excel 2007、2010、2013和2016。