VBA代码---毫秒级时间记录_vba now 毫秒
这是 最基础的一个计时用法 ,这次主要针对入门级同学 的学习,大神请放过 。也算是给我自己复习一遍吧。本次写了 三个案例 ,就不逐一演示了,特别是超越24小时的案例。
在V BA中计算代码运行时长的核心逻辑是:记录代码开始执行的时间→运行目标代码→记录代码结束执行的时间→计算时间差。
如果你也喜欢,请帮忙点个爱心,让更多的人学到这么有趣的文章。
需要课件的同学,可以 截图需要的课件 发私信, 留下邮箱 。不必理会Ai的回复信息。
效果如视频所示:
一、核心方法
VBA中常用两种时间函数记录时间戳,适用于不同精度需求:
1.   Timer  函数(推荐,毫秒级精度) 
-   功能 
:返回从“当天午夜”到当前时刻的 秒数 (单精度浮点数,包含小数部分,精确到毫秒级)。
 -   适用场景 
:代码运行时间较短(如毫秒~小时级),需高精度计时
 
2.   Now  函数(秒级精度) 
-   功能 
:返回当前系统的 日期和时间 (日期+时间,精确到秒,无毫秒部分)。
 -   适用场景 
:代码运行时间较长(如小时~天级),对毫秒精度无要求。
 
二、完整示例代码
以下示例使用  Timer 
函数实现高精度计时,包含“开始时间记录→代码运行→结束时间记录→时间差计算→结果格式化输出”全流程。
示例1:基础版(计算代码运行总秒数)
Sub 计算代码运行时长_基础版Dim startTime As Single ' 开始时间(秒数,Timer返回值)Dim endTime As Single ' 结束时间(秒数)Dim duration As Single ' 总时长(秒数)' 1. 记录开始时间startTime = Timer' 2. 【运行目标代码】(这里用循环模拟耗时操作)Dim i As LongFor i = 1 To 1000000 ' 循环100万次,模拟耗时' 目标代码(替换为实际需要计时的代码)Next i' 3. 记录结束时间endTime = Timer' 4. 计算时间差(秒数,含毫秒)duration = endTime - startTime' 5. 输出结果(秒数+毫秒)MsgBox "代码运行总时长:" & duration & " 秒" & vbCrLf & _"(精确到毫秒:" & Format(duration, "0.000") & " 秒)", vbInformationEnd Sub
Sub 计算代码运行时长_基础版
Dim startTime As Single ' 开始时间(秒数,Timer返回值)
Dim endTime As Single ' 结束时间(秒数)
Dim duration As Single ' 总时长(秒数)
' 1. 记录开始时间
startTime = Timer
' 2. 【运行目标代码】(这里用循环模拟耗时操作)
Dim i As Long
For i = 1 To 1000000 ' 循环100万次,模拟耗时
' 目标代码(替换为实际需要计时的代码)
Next i
' 3. 记录结束时间
endTime = Timer
' 4. 计算时间差(秒数,含毫秒)
duration = endTime - startTime
' 5. 输出结果(秒数+毫秒)
MsgBox "代码运行总时长:" & duration & " 秒" & vbCrLf & _
"(精确到毫秒:" & Format(duration, "0.000") & " 秒)", vbInformation
End Sub
示例2:进阶版(格式化输出为“时:分:秒.毫秒”)
上述基础版返回“总秒数”,可读性较差。进阶版通过计算将秒数转换为“小时:分钟:秒.毫秒”格式,更直观:
Sub 计算代码运行时长_格式化输出Dim startTime As Single, endTime As Single, duration As SingleDim hours As Long, minutes As Long, seconds As Long, milliseconds As Long' 1. 记录开始时间startTime = Timer' 2. 【运行目标代码】(替换为实际需要计时的代码)Dim i As LongFor i = 1 To 2000000 ' 模拟耗时操作(循环200万次)Next i' 3. 记录结束时间并计算总时长(秒数)endTime = Timerduration = endTime - startTime' 4. 处理跨午夜情况(若代码运行超过24小时,Timer返回值会重置,需修正)If duration 86400秒 = 24小时' 5. 转换为“时:分:秒.毫秒”格式hours = Int(duration / 3600) ' 小时数(总秒数 ÷ 3600)minutes = Int((duration - hours * 3600) / 60) ' 剩余分钟数(总秒数 - 小时×3600后 ÷ 60)seconds = Int(duration - hours * 3600 - minutes * 60) ' 剩余秒数milliseconds = Int((duration - Int(duration)) * 1000) ' 毫秒数(小数部分×1000取整)' 6. 输出格式化结果MsgBox "代码运行总时长:" & vbCrLf & _hours & "小时 " & minutes & "分钟 " & seconds & "秒 " & milliseconds & "毫秒", vbInformationEnd Sub
Sub 计算代码运行时长_格式化输出
Dim startTime As Single, endTime As Single, duration As Single
Dim hours As Long, minutes As Long, seconds As Long, milliseconds As Long
' 1. 记录开始时间
startTime = Timer
' 2. 【运行目标代码】(替换为实际需要计时的代码)
Dim i As Long
For i = 1 To 2000000 ' 模拟耗时操作(循环200万次)
Next i
' 3. 记录结束时间并计算总时长(秒数)
endTime = Timer
duration = endTime - startTime
' 4. 处理跨午夜情况(若代码运行超过24小时,Timer返回值会重置,需修正)
If duration
' 5. 转换为“时:分:秒.毫秒”格式
hours = Int(duration / 3600) ' 小时数(总秒数 ÷ 3600)
minutes = Int((duration - hours * 3600) / 60) ' 剩余分钟数(总秒数 - 小时×3600后 ÷ 60)
seconds = Int(duration - hours * 3600 - minutes * 60) ' 剩余秒数
milliseconds = Int((duration - Int(duration)) * 1000) ' 毫秒数(小数部分×1000取整)
' 6. 输出格式化结果
MsgBox "代码运行总时长:" & vbCrLf & _
hours & "小时 " & minutes & "分钟 " & seconds & "秒 " & milliseconds & "毫秒", vbInformation
End Sub
示例3:使用   Now  函数(适合长时运行代码) 
若代码运行时间超过几小时,  Now  函数更易读(直接返回日期时间),但精度仅到秒级: 
Sub 计算代码运行时长_Now函数Dim startTime As Date, endTime As DateDim duration As Double ' 时间差(单位:天,1天=24小时)' 1. 记录开始时间(日期+时间)startTime = Now' 2. 【运行目标代码】(模拟长时间运行,如等待3秒)Application.Wait Now + TimeValue("00:00:03") ' 等待3秒' 3. 记录结束时间并计算时间差endTime = Nowduration = endTime - startTime ' 时间差(单位:天,此处为 3秒/86400秒/天 = 3.4722e-5 天)' 4. 转换为“时:分:秒”格式(无毫秒)MsgBox "代码运行总时长:" & _Format(duration, "hh小时mm分钟ss秒"), vbInformation ' 输出:00小时00分钟03秒End Sub
Sub 计算代码运行时长_Now函数
Dim startTime As Date, endTime As Date
Dim duration As Double ' 时间差(单位:天,1天=24小时)
' 1. 记录开始时间(日期+时间)
startTime = Now
' 2. 【运行目标代码】(模拟长时间运行,如等待3秒)
Application.Wait Now + TimeValue("00:00:03") ' 等待3秒
' 3. 记录结束时间并计算时间差
endTime = Now
duration = endTime - startTime ' 时间差(单位:天,此处为 3秒/86400秒/天 = 3.4722e-5 天)
' 4. 转换为“时:分:秒”格式(无毫秒)
MsgBox "代码运行总时长:" & _
Format(duration, "hh小时mm分钟ss秒"), vbInformation ' 输出:00小时00分钟03秒
End Sub
二、关键说明
  1. 为什么优先推荐   Timer  函数? 
-   精度更高 
:
Timer返回毫秒级时间(如52200.123秒 = 14:30:00.123),而Now仅到秒级(无毫秒)。 -   计算简单 
:直接用
结束时间 - 开始时间得到总秒数,无需处理日期转换。 
2. 跨午夜问题处理
Timer 函数在“当天午夜”会重置为 0 (例如23:59:59时返回 86399.999 ,00:00:00时返回 0  )。若代码运行跨午夜(如23:59开始,00:01结束),   endTime - startTime 会出现负数,需通过  duration = duration + 86400 修正(86400秒=24小时)。
3. 结果输出方式
-  
MsgBox弹窗:适合手动运行代码,直观查看结果
 
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
 - Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
 - Spring Boot+Pinot实战:毫秒级实时竞价系统构建
 - SpringBoot敏感配置项加密与解密实战
 - SpringBoot 注解最全详解,建议收藏!
 - Spring Boot 常用注解大全:从入门到进阶
 - SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
 - Springboot集成Kafka原理_spring集成kafka的原理
 - Spring Boot中@Data注解的深度解析与实战应用
 - 大佬用1000字就把SpringBoot的配置文件讲的明明白白!
 
