Excel自定义LastModified宏无法自动更新,求打开文件时自动更新方案
解决Excel自定义函数打开工作簿时自动更新的问题
嘿Max,当然可行啦!你的自定义函数LastModified()默认不会在工作簿打开时自动触发计算——哪怕设置了自动计算模式,Excel对自定义函数的计算触发逻辑比较保守,只有当函数参数变化或手动编辑时才会更新。下面给你两个简单的解决方案:
方案1:把函数改成易失性函数
给函数加上Application.Volatile声明,这样它会在每次工作表的计算周期(包括打开工作簿时)自动更新。修改后的代码如下:
Function LastModified() As Date Application.Volatile ' 标记为易失性函数,触发自动计算 LastModified = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time") End Function
这个方法最简单,修改完函数后,下次打开工作簿时,单元格里的=LastModified()就会自动刷新了。
方案2:用工作簿打开事件强制刷新
如果你不想让函数变成易失性(避免不必要的频繁计算),可以通过Workbook_Open事件手动触发计算:
- 按
Alt+F11打开VBA编辑器 - 在左侧项目栏找到
ThisWorkbook,双击打开它的代码窗口 - 在顶部下拉菜单里,先选
Workbook,再选Open,然后输入以下代码:
Private Sub Workbook_Open() ' 替换成你存放公式的单元格地址,比如Sheet1的A1 ThisWorkbook.Sheets("Sheet1").Range("A1").Calculate ' 如果要刷新整个工作表,就用:ThisWorkbook.Sheets("Sheet1").Calculate End Sub
这样每次打开工作簿时,代码会自动指定单元格(或整个工作表)重新计算,你的最后修改日期就会自动更新了。
额外小提示:更稳定的获取修改日期方式
有时候BuiltinDocumentProperties("Last Save Time")可能会因为文件类型(比如未保存的新文件)或权限问题出错,你可以用FileDateTime函数替代,兼容性更好:
Function LastModified() As Date Application.Volatile If ThisWorkbook.Path <> "" Then ' 检查文件是否已保存 LastModified = FileDateTime(ThisWorkbook.FullName) Else LastModified = Now() ' 未保存的文件返回当前时间,也可以改成提示文本 End If End Function
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

