标签:VBA,Timer函数
引子:本文学习整理自eforexcel.com,很有意思。
最基本、最经典、最流行的代码计时模式是通过VBA自带的Timer函数实现的,它返回一个表示自午夜以来经过的秒数的单精度数。因此,当想要测量时间并以秒为单位给出结果时,代码如下:
代码语言:javascript复制Dim StartTime As Single
Dim TimeElapsed As Single
StartTime= Timer
'<在这里放置代码>
TimeElapsed= Timer - StartTime
Timer函数有多精确
Timer函数返回单精度数据类型结果。一个单精度数据类型变量最多可以容纳包括小数的8位数字。因此,如果在下午3:49查看Timer函数的结果,其结果将是56964.29。上午00:50的结果为3006.773,晚上11:51的结果为85850.41。因此,它的最小精度为两个小数点,这对于我们的大多数任务来说是足够的。
系统时钟滴答精度为1/64秒或1/256秒。在这方面存在着各种各样的观点,并且没有关于这方面的正确的微软文档作为权威信息。对于我们的大多数工作来说,这么高的精度应该是可以的。
克服Timer函数的午夜问题
因为Timer结果是自午夜以来经过的秒数,所以如果在下一个午夜到达时代码仍在运行,它将不会给出正确的结果。因此,如果在晚上11:54分启动代码,Timer函数将给出57255.91的结果。午夜时,Timer函数重置为0,因为它只计算午夜后的秒数。如果你的工作在凌晨00:01完成,这意味着新的Timer值是60,因此经过的时间将是负数,这显然是不对的。
为了解决这个问题,还需要检查日期部分,并修改Timer代码,如下所示:
代码语言:javascript复制Dim StartTime As Single
Dim TimeElapsed As Single
Dim StartDate As Date
StartDate= Date
StartTime= Timer
'<在这里放置代码>
TimeElapsed= 86400 * (Date - StartDate) Timer - StartTim
还有一段代码可供参考:
代码语言:javascript复制Dim StartTime As Date
Dim TimeElapsed As Single
Const TestInterval = 500
StartTime= Now()
'
'<在这里放置代码>
'用作已经过时间
'
TimeElapsed= (Now() - StartTime) * 86400
'
'用作间隔计时器操作的触发器
'
If (Now() - StartTime) * 86400 > TestInterval Then
'<在这里放置代码>
End If
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。