Excel VBA实现特定列单元格修改时自动更新最后修改日期
Excel VBA实现指定列修改时自动更新最后修改日期
适配指定列+解决误触发问题
修改后的代码
直接替换你原有的代码即可:
Private Sub Worksheet_Change(ByVal Target As Range) ' 定义需要监听修改的列:B、C、F、G、L Dim watchCols As Range Set watchCols = Me.Range("B:B,C:C,F:F,G:G,L:L") ' 检查修改的单元格是否在目标列范围内 If Not Application.Intersect(Target, watchCols) Is Nothing Then ' 关闭事件触发,避免循环更新 Application.EnableEvents = False ' 更新对应行的AC列为最后修改日期(要带时间就把Date改成Now()) Me.Range("AC" & Target.Row).Value = Date ' 重新开启事件触发 Application.EnableEvents = True End If End Sub
操作步骤(适合无VBA基础)
- 打开你的Excel文件,右键点击需要设置的工作表标签(比如「Sheet1」),选择「查看代码」
- 在弹出的VBA编辑器窗口里,删掉原来的代码,粘贴上面的新代码
- 按
Ctrl+S保存文件,注意要选「Excel启用宏的工作簿(*.xlsm)」格式,否则宏会失效
关键说明
- 只监听B、C、F、G、L列的内容修改,其他列的操作不会触发AC列更新
- 仅当单元格内容实际被修改时才会触发(单纯点击单元格再退出不会触发)
Application.EnableEvents = False是为了防止更新AC列时重复触发事件,避免报错- 如果需要记录修改的具体时间(不是只显示日期),把代码里的
Date改成Now()即可
内容的提问来源于stack exchange,提问作者Nn Nn




