You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VBA获取Windows/PC的最后关机时间?

追踪工作时段关机时间的解决方案

一、用VBA查询Event ID 1074实现关机时间记录

可以通过VBA调用WMI(Windows Management Instrumentation)访问系统事件日志,筛选Event ID 1074的记录来获取关机时间,具体实现代码如下:

Sub GetLastShutdownTime()
    Dim wmiService As Object
    Dim eventList As Object
    Dim singleEvent As Object
    Dim queryStr As String
    Dim shutdownTime As Date
    
    ' 连接本地WMI服务
    Set wmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    
    ' 构建查询语句:筛选系统日志中EventCode=1074的记录,按时间倒序取最新一条
    queryStr = "SELECT * FROM Win32_NTLogEvent " & _
               "WHERE Logfile='System' AND EventCode=1074 " & _
               "ORDER BY TimeGenerated DESC"
    
    Set eventList = wmiService.ExecQuery(queryStr)
    
    For Each singleEvent In eventList
        ' 转换WMI的UTC时间为本地时间
        shutdownTime = CDate(Mid(singleEvent.TimeGenerated, 1, 8) & " " & Mid(singleEvent.TimeGenerated, 9, 6))
        shutdownTime = DateAdd("h", -singleEvent.TimeZone / 60, shutdownTime)
        
        ' 将关机时间写入指定单元格,示例为日志表的B列对应行
        ThisWorkbook.Sheets("工作日志").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = shutdownTime
        Exit For ' 仅取最新的一条关机记录
    Next singleEvent
    
    ' 释放对象
    Set singleEvent = Nothing
    Set eventList = Nothing
    Set wmiService = Nothing
End Sub

注意事项:

  • 运行该宏需要管理员权限,否则无法访问系统事件日志
  • 若要区分关机和重启记录,可通过singleEvent.Message内容判断,比如包含"shutdown"为关机、"restart"为重启
  • 建议在开机启动的宏中调用此方法,将上一次关机时间与本次开机时间配对写入日志

二、其他可行方案

1. 关机前触发脚本记录时间

通过任务计划程序设置关机/重启前执行脚本,直接记录时间到本地文件,后续Excel宏读取该文件:

  • 批处理示例(save_shutdown_time.bat):
@echo off
echo %date% %time% >> C:\WorkRecord\shutdown_log.txt
  • 任务计划配置:触发条件选择「系统事件」,Event ID设为1074(来源User32),执行上述批处理

2. PowerShell辅助查询

若VBA权限受限,可使用PowerShell脚本查询事件日志,再将结果同步到Excel:

$latestShutdown = Get-WinEvent -LogName System -FilterXPath "*[System[EventID=1074]]" | Select-Object -First 1
$shutdownTime = $latestShutdown.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss")
# 可通过COM对象直接写入Excel,或输出到文本文件由VBA读取

3. 开机时自动配对时段

在开机启动的宏中,先查询上一次的1074事件时间,与本次开机时间一起写入日志表,自动形成完整的工作时段记录。

内容的提问来源于stack exchange,提问作者FoFE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 06:28:26