在 VBA excel 中获取系统运行时间

问题描述 投票:0回答:1

我需要在 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

非常混乱!

vba function office365
1个回答
0
投票

来自 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
© www.soinside.com 2019 - 2024. All rights reserved.