VBA延时

发布时间 2023-07-15 16:32:37作者: iZJ"Qq4577105

Application.Wait method (Excel)

Wait 方法暂停 Microsoft Excel 的所有操作,并且,Wait 起作用时可能禁止您对计算机做其他操作。 不过,后台操作(如打印和重新计算)将继续进行。

语法:Application.Wait(你想要恢复宏的时间,采用 Microsoft Excel 日期格式。)该参数为字符串(时,分,秒)格式,不支持小数,如:
   Application.Wait(Now + TimeValue("0:00:00,0.5"))这样是实现不了延时0.5s(500ms)的
e.g:
Application.Wait(Now + TimeValue("0:0:10"))

暂停excel操作大约 10 秒。Now + TimeValue("0:0:1") 表示当前时间加上 1 秒钟的时间间隔,产生的结果将用于指定等待的结束时间。

Now 函数将返回完整的日期和时间;
Time 函数只返回时间,而不返回日期。

Timer函数配合DoEvents函数

VBA 的 Timer 函数将系统时间时分秒全部加起来以秒为单位返回数值。

e.g1:

'通过执行空语句来实现延时,这样和wait函数一样,执行期间无法其他操作
Sub DelayWithInteraction()
    Dim StartTime As Double
    Dim DelaySeconds As Double
    
    DelaySeconds = 0.5   '设定等待时间(以秒为单位)
    StartTime = Timer ' 记录开始时间
    Do While Timer < StartTime + DelaySeconds
        ' 处理其他事件
    
    Loop
    ' 等待完成后执行其他代码
    MsgBox "等待完成!"
End Sub

 e.g2:

'通过DoEvents 函数可以让 VBA 在等待期间处理其他的事件。这样,你就可以进行交互操作(例如点击按钮、滚动窗口等),而不会感到阻塞。
Sub DelayWithInteraction(xs as double)
    Dim StartTime As Double
    Dim DelaySeconds As Double
    DelaySeconds = xs   '设定等待时间(以秒为单位)
    StartTime = Timer     ' 记录开始时间
    Do While Timer < StartTime + DelaySeconds
    DoEvents    
    Loop
End Sub

注意:DoEvents 函数的执行时间通常非常短暂,大致在几毫秒的范围内。然而,具体的执行时间会受到多个因素的影响,如处理器速度、系统负载、当前运行的其他程序等。因此,无法精确预测 DoEvents 函数一次的执行时间。

 

TimeValue 函数

返回包含时间的 Variant (Date)。

所需的 time参数 通常是一个 字符串表达式。可以使用 12 小时制或 24 小时制输入有效时间。 例如, "2:24PM" 和 "14:24" 都是有效的 时间 参数。

如果 time 参数包含日期信息,则 TimeValue 不返回该信息。 但是,如果 time 包括无效日期信息,则会出现错误。最小单位1s,只接受整数值,小数部分将会被忽略。

Debug.Print TimeValue("4:35:17")        'return 4:35:17
Debug.Print TimeValue("4:35:17 PM")    '16:35:17
Debug.Print TimeValue("4:35:17 AM")    '4:35:17

TimeSerial 函数

返回包含特定的小时、分钟和秒所对应的时间的 Variant (Date)。

最小单位1s,只接受整数值,小数部分将会被忽略。

debug.print TimeSerial(16, 35, 17)    'return 16:35:17
debug.print TimeSerial(16, -10, 17)   'return 15:50:17
debug.print TimeSerial(0,0,0.5)       'return 0,0,0    因为timeserial最小单位1s,只接受整数值,所以小数部分将会被忽略。