前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >克服Timer函数的午夜限制,也许会用到

克服Timer函数的午夜限制,也许会用到

作者头像
fanjy
发布2022-06-04 10:05:43
5080
发布2022-06-04 10:05:43
举报
文章被收录于专栏:完美Excel完美Excel完美Excel

标签:VBA,Timer函数

引子:本文学习整理自eforexcel.com,很有意思。

最基本、最经典、最流行的代码计时模式是通过VBA自带的Timer函数实现的,它返回一个表示自午夜以来经过的秒数的单精度数。因此,当想要测量时间并以秒为单位给出结果时,代码如下:

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代码,如下所示:

Dim StartTime As Single
Dim TimeElapsed As Single
Dim StartDate As Date
StartDate= Date
StartTime= Timer
'<在这里放置代码>
TimeElapsed= 86400 * (Date - StartDate) + Timer - StartTim

还有一段代码可供参考:

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

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档