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
相关产品推荐
相关产品推荐

