我需要在 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
非常混乱!
来自 https://www.devhut.net/vba-computer-uptime/ :
Sub test()
Debug.Print GetPCUptime()
End Sub
Function GetPCUptime(Optional sHost As String = ".") As String
Dim oWMI As Object, oOSs As Object, oOS As Object, lUpTime As Long
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sHost & "\root\cimv2")
Set oOSs = oWMI.ExecQuery("SELECT SystemUpTime FROM Win32_PerfFormattedData_PerfOS_System")
For Each oOS In oOSs
lUpTime = oOS.SystemUpTime
Select Case lUpTime
Case Is < 3600
GetPCUptime = Round(oOS.SystemUpTime / 60, 2) & " minutes"
Case Is < 86400
GetPCUptime = Round(oOS.SystemUpTime / 3600, 2) & " hours"
Case Else
GetPCUptime = Round(oOS.SystemUpTime / 86400, 2) & " days"
End Select
Next
End Function