在宏中延迟(Microsoft Excel)
克里斯正在开发一个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。