VBA代码---毫秒级时间记录_vba now 毫秒

VBA代码---毫秒级时间记录_vba now 毫秒

编码文章call10242025-09-14 15:26:445A+A-

这是 最基础的一个计时用法 ,这次主要针对入门级同学 的学习,大神请放过 。也算是给我自己复习一遍吧。本次写了 三个案例 ,就不逐一演示了,特别是超越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 Long For 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 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 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 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

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 弹窗

    :适合手动运行代码,直观查看结果

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4