有些时候,在实际办公过程中,同一份表单可能需要经由多个不同的人员修改审批。而随着时间的推移,对于每个人具体修改了什么内容,修改是否合理我们无从得知。对于 Excel 本身,每一次修改的记录也得不到保存。当然,对于大部分表单来说这样大大提高了软件性能,但是对于一些特别重要的表单,修改记录还是比较重要的,本文就简单说下如何自动检测并保存 Excel 表单修改记录。
首先我们需要有一个用于记录数据的 Sheet,命名数据区域 “dataRng” 如下图所示:
然后我们需要增加一个用于记录数据的 Sheet,将以下代码复制到对应 Sheet 页中以监控该页面数据修改记录,命名数据区域“recordRng”,如下图所示。
最后记录数据修改的代码如下:
模块代码
Public dataRng, targetAddress, oldValue, recordSheet, recordRng ' 记录工作簿修改信息 Public Function UpdateRecord(dataRng, targetAddress, oldValue, recordSheet, recordRng) On Error Resume Next For Each rngCell In Range(dataRng) If targetAddress = rngCell.Address And oldValue <> "" Then With ThisWorkbook.Worksheets(recordSheet).Range(recordRng) If oldValue <> Range(targetAddress).Value Then .Rows(2).Insert Shift:=xlDown .Rows(3).Copy .Rows(2).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False .Cells(2, 1) = Range(targetAddress).Address .Cells(2, 2) = Cells(5, Range(targetAddress).Column) .Cells(2, 3) = oldValue .Cells(2, 4) = Range(targetAddress).Value .Cells(2, 5) = Date End If End With End If Next End Function
Sheet引用
' 请求记录数据修改函数记录数据 Sub Worksheet_Change(ByVal Target As Range) Call UpdateRecord(dataRng, targetAddress, oldValue, recordSheet, recordRng) End Sub ' 检测单元格变化获取原始信息 Sub Worksheet_SelectionChange(ByVal Target As Range) dataRng = "dataRng" oldValue = Target.Value targetAddress = Target.Address recordSheet = "修改记录" recordRng = "recordRng" End Sub
以上。
评论 (1)
学习了,感谢~