有些时候,在实际办公过程中,同一份表单可能需要经由多个不同的人员修改审批。而随着时间的推移,对于每个人具体修改了什么内容,修改是否合理我们无从得知。对于 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
以上。










