我需要在 excel vba 中获取系统正常运行时间,这可以在任务管理器上找到,如下所示:
我在网上找到了7年前的以下内容:
Public Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Sub test()
Debug.Print GetTickCount()
End Sub
这个输出:206329937
如果我除以 8400,我得到 15 天,而实际上应该是 2 天 9 小时等等。
不确定出了什么问题。另请参阅在线内容,我应该使用 IF 公式来声明其是 64 位还是 32 位,但我也不确定如何执行此操作?
任何建议都会非常感谢。
更新: 原来前 6 个数字:206329 将转换为正确的时间。我不知道剩下的数字意味着什么有人知道吗?
Dim NewTime
NewTime = (Left(GetTickCount(), 6)) / 86400
Debug.Print NewTime
我尝试将时间转换为 dd:hh:mm:ss 格式,并且仅当其在工作表上格式化为自定义单元格格式时才有效。
非常奇怪,不知道为什么会出现这种情况,但这是我使用时得到的结果:
Debug.Print Format(NewTime, "DD:MM:HH:SS")
01:01:09:27
很混乱 !
你的主要错误是除以 8400。
刻度以 ms(毫秒)为单位进行测量。因此,要获得天数,您需要除以 24 * 60 * 60 * 1000(小时、分钟、秒、毫秒)。
对于您的情况,这将需要 2.388 天。
要获得天数、小时数、分钟数和秒数,您只需要一些数学知识。逻辑是计算完整天数,从原始刻度数中减去该天数所使用的刻度数。现在对小时进行同样的操作(但仅除以 (60 * 60 * 1000) 等。
以下代码借助一个小函数来完成此操作 - 请注意,第一个参数 ( )在该函数中
ticks
传递和修改。ByRef
另请注意,我曾经24&
强制 VBA 使用 long 值,否则24 * 60 * 60
会引发溢出错误。在你的情况下,这会打印
来自https://www.devhut.net/vba-computer-uptime/: