Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 匿名

[已解决]记录当前系统时间并精确到毫秒

[复制链接]
发表于 2015-8-31 14:42 | 显示全部楼层
本帖最后由 t13564865256 于 2015-8-31 14:44 编辑

最佳答案的毫秒ss,取值有问题
当毫秒是很小的小数时,会转用科学计数,取前四位就导致结果不正确
将程序改成以下,就完美解决了。
Sub ttt()
    Dim tt As Single
    Dim h As String
    Dim m As String
    Dim s As String
    Dim ss As String
    Dim detelR As Long
    tt = Timer
    h = Format(Int(tt / 3600), "00")
    m = Format(Int((tt - 3600 * h) / 60), "00")
    s = Format(Int(tt - h * 3600 - m * 60), "00")
    ss = Format(Application.RoundDown(tt - Int(tt), 3), ".000")
    detelR = ThisWorkbook.Sheets(1).Range("A62566").End(xlUp).Row
    If detelR >= 19 Then
        ThisWorkbook.Sheets(1).Range("A2:B" & detelR).ClearContents
        detelR = 1
    End If
    ThisWorkbook.Sheets(1).Cells(detelR + 1, "A") = h & ":" & m & ":" & s & ss
End Sub
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2015-9-25 12:09 | 显示全部楼层
这是有问题的吧, timer 返回的精度是 s, 怎么可能通过计算,得出显示出来的精度能到 ms 呢?
回复

使用道具 举报

发表于 2015-9-25 13:08 | 显示全部楼层
本帖最后由 香川群子 于 2015-9-25 13:13 编辑
galq 发表于 2015-9-25 12:09
这是有问题的吧, timer 返回的精度是 s, 怎么可能通过计算,得出显示出来的精度能到 ms 呢?


是的。

如果不使用API函数,是不可能得到ms级时间数值的。


…………
上面的方法,仅仅是利用本机的Timer值,通过数学计算,得到秒的小数点后3位的值。
(计算精度值为单精度值,但可以返回15位有效数值的小数)

……
如果这样子,那么处理可以很简单:
ActiveCell = "'" & Format(Time, "hh:mm:ss") & Format(Timer - Int(Timer), ".000")

函数分3部分:
① "'"
如果单元格格式未设置,则必须加文本前导"'"、否则无法正确显示。
单元格格式设置代码:
ActiveCell.NumberFormatLocal = "hh:mm:ss.000"

② Format(Time, "hh:mm:ss")
无需转换计算、直接得到。注意此时引用的是Time 日期时刻 不是 Timer 秒数
Time 日期时刻 : 1天86400秒=1 ,当前时刻的对应比例小数。如 12:00:00 = 0.5

③ Format(Timer - Int(Timer), ".000")
整除计算然后返回Timer的小数部分。
Timer 秒数: 时刻的实际秒数值 12:00:00 = 43200


以上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-28 11:36 , Processed in 0.519694 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表