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

VBA中DateLastModified返回值多1小时的问题排查求助

老兄,这个问题我之前帮人排查过好几次,十有八九和夏令时切换或者系统时区/区域设置的变动有关!咱们一步步来拆解:

1. 先排查系统时间相关设置

FSO的DateLastModified返回的是基于系统本地时间的结果,所以先确认这几点:

  • 右键任务栏的时间 → 「调整日期和时间」,检查当前时区是否和周五一致;
  • 看看「自动调整夏令时」的开关有没有被改动(很多地区会在春秋季切换夏令时,时间会调快/慢1小时);
  • 也可以对比其他设备上同一个文件的修改时间,排除文件本身时间被篡改的可能。

2. 验证文件的实际修改时间

直接找到目标文件,右键 → 「属性」,查看「修改时间」:

  • 如果属性里的时间也比周五的结果多1小时,那说明是系统时间/时区的问题,和Excel/VBA无关;
  • 如果属性里的时间是正常的,那才需要进一步排查Excel的问题。

3. 用替代方法对比结果,定位问题

可以试试用WMI或者PowerShell来获取文件修改时间,和FSO的结果对比:

VBA用WMI获取的代码片段

Sub CompareFileModifiedTimes()
    Dim fso As Object, wmiService As Object, wmiFile As Object
    Dim targetPath As String
    
    targetPath = "你的文件完整路径" '注意替换成实际路径,比如"C:\Docs\test.xlsx"
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '输出FSO的结果
    Debug.Print "FSO返回的修改时间: " & fso.GetFile(targetPath).DateLastModified
    
    '用WMI获取并输出
    Set wmiService = GetObject("winmgmts:\\.\root\cimv2")
    For Each wmiFile In wmiService.ExecQuery( _
        "SELECT * FROM CIM_DataFile WHERE Name='" & Replace(targetPath, "\", "\\") & "'")
        Debug.Print "WMI返回的修改时间: " & wmiFile.LastModified
    Next
End Sub

PowerShell验证UTC时间

打开PowerShell,执行以下命令(替换成你的文件路径):

Get-Item "你的文件路径" | Select-Object LastWriteTime, LastWriteTimeUtc

如果UTC时间和周五的本地时间转换后的UTC一致,那肯定是本地时区/夏令时的锅。

4. Excel层面的小坑

如果前面排查都没问题,那可能是Excel的日期格式解析问题:

  • 试试把DateLastModified的结果用CDate()转换后再输出,比如:
    Debug.Print "转换后的时间: " & CDate(fils.DateLastModified)
    
  • 检查Excel的区域设置(文件 → 选项 → 区域设置),确认日期时间格式有没有被改动。

一般按这个流程走,很快就能找到问题根源啦!

内容的提问来源于stack exchange,提问作者Mr.Riply

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:41:58