VBA智能记录指定列更新时间戳
创作时间:
作者:
@小白创作中心
VBA智能记录指定列更新时间戳
引用
CSDN
1.
https://blog.csdn.net/taller_2000/article/details/137742291
在Excel中,我们常常需要记录某些关键数据的修改时间,以便追溯变更历史。本文将介绍如何使用VBA实现这一功能,并支持用户在表格中插入/删除列等操作。
实际应用场景
某公司产品统计表如下所示,为了便于追溯变更,如果用户修改了“厂家指导价”或者“供货价”,那么“修改时间列”需要记录当前的时间。
功能需求
为了满足各种使用场景,此功能需要支持以下情况:
- 用户可以在任意位置插入/删除列
- 用户可以在表格之上或左侧插入任意多行
实现代码
Private Sub Worksheet_Change(ByVal Target As Range)
Const KEY_COL = "厂家指导价|供货价"
Const UPDATE_COL = "修改时间"
Const TAB_NAME = "Tab_Product"
With Target
If .CountLarge > 1 Then Exit Sub
Dim oTab As ListObject: Set oTab = .ListObject
If oTab Is Nothing Then Exit Sub
If UCase(oTab.Name) <> UCase(TAB_NAME) Then Exit Sub
Dim r As Range: Set r = Application.Intersect(oTab.HeaderRowRange, Target)
If Not r Is Nothing Then Exit Sub
Set r = Application.Intersect(oTab.HeaderRowRange, .EntireColumn)
If InStr(1, KEY_COL, r.Value) > 0 Then
Dim updateCell As Range, iCol
iCol = Application.Match(UPDATE_COL, oTab.HeaderRowRange, 0)
If IsError(iCol) Then Exit Sub
Set updateCell = Application.Intersect(oTab.ListColumns(iCol).Range, .EntireRow)
Application.EnableEvents = False
updateCell.Value = Format(Now(), "yyyy/MM/dd hh:mm:ss")
Application.EnableEvents = True
End If
End With
End Sub
代码解析
- 第2行代码定义常量为监控列的标题行名称,以竖线分隔。
- 第3行代码定义常量为时间戳所在列标题名称。
- 第4行代码定义常量为表格(ListObject对象)名称。
- 第6行代码如果多个单元格发生变化,则终止代码执行。
- 第7行代码获取Target单元格所在的表格,如果对象不存在,说明Target不在表格中,则第8行代码终止代码执行。
- 如果Target在表格中,第9行代码判断表格名称是否为指导名称,如果不满足条件,则终止代码执行。
- 第10行代码获取Target和表格标题行的交叉区域,即判断Target是位于标题行中。
- 如果Target位于标题行中,第11行代码终止代码执行,即无需更新时间戳。
- 第12行代码获取Target所在列的标题行名称。
- 第13行代码判断标题行名称存在与监控列表中。
- 第14行代码调用工作表函数Match在表格标题行中查找时间戳列名称。
- 第15行代码如果返回结果为错误值(说明表格中不存在时间戳列),则终止代码执行。
- 第17行代码获取Target所在行和时间戳列的交叉位置单元格。
- 第18行代码禁用系统事件事件处理功能。
- 第19行代码更新时间戳。
- 第20行代码恢复系统事件处理功能。
热门推荐
安化黑茶与红茶的区别?
培训员工上岗培训内容详解:提升员工技能与效率的关键
崇明这些高颜值咖啡馆,你去过几个?
楼板厚度国家标准:不同建筑类型的楼板厚度要求详解
伪共享问题如何解决?
女性工程师如何推动工程行业的技术和职业发展
空间直线方程及参数方程
关于普罗米修斯的故事
装修前必问:水电改造咋规划,安全便利两不误?
IP68级防水是什么概念?它能保护设备多长时间?
血压是指什么?如何保持血压正常?
股票bbi如何深入理解?这种深入理解有哪些实际用途?
有哪些高情商的聊天技巧?
重庆“非遗”上春晚
Windows 11双屏显示如何设置?如何优化显示效果?
锦鲤一年能长多少厘米?不同年份锦鲤体型增长情况
如何治疗舌尖麻木与瘙痒的症状
乳酸菌素片和益生菌他俩有什么区别
吃山药会胀气吗?专家孙晓红医生告诉你答案
科普|慢性咳嗽原因多,专业诊疗不可少
张继:唐代诗人的沉浮与诗韵
深圳地铁11号线早高峰突发故障,乘客被困车厢20分钟,官方致歉
三个月掌握流利日语:实用学习指南
拒绝仰卧起坐,4个步骤打造迷人六块腹肌
工资性收入增长6.8%,为何个人所得税却下降7%?
舞蹈的表演艺术-舞蹈的情感世界
2025年身份领域三大发展趋势,企业该如何选择?
固态电池再掀热潮,是噱头还是真突破
改善颈动脉斑块,记住这几点
踏访大亚湾核电站:投入商业运营30年,孕育中国核电事业“黄金一代”