我目前正在尝试设置一个电子表格,这样我就可以跟踪每次办公室中有人更改其中的任何信息时,我可以通过以下代码使用它: -
Dim PreviousValue
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> PreviousValue Then
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = _
Application.UserName & " changed cell " & Target.Address _
& " from " & PreviousValue & " to " & Target.Value
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target.Value
End Sub
记录对工作簿中所有单元格的任何更改。但是我也有这个代码: -
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("MEP 01").Range("D5").Value = Date
Sheets("MEP 01").Range("E5").Value = Time
End Sub
然后记录上次保存文档的时间,我想知道是否有任何方法可以从审计代码中删除单元格D5和E5,因为这两个单元格与D4(包含= TODAY()公式)会经常变化,会使我的审计工作变得相当大。
任何帮助都将非常感激。
答案 0 :(得分:1)
在Workbook_BeforeSave中添加:
Application.EnableEvents = False
在更改工作表之前,请务必添加
Application.EnableEvents = True
在结束Sub。之前
这可以防止触发Worksheet_Change
事件,因此不会将任何内容写入日志。
答案 1 :(得分:0)
经过一番搜索,我找到了这个查询的答案: -
要从Worksheet_Change函数中排除某些单元格,您只需为相关单元格添加以下代码行: -
If Target.Address = "Cell number" Then Exit Sub
最终代码如下所示: -
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5" Then Exit Sub
If Target.Address = "$E$5" Then Exit Sub
''Excludes cells D5 and E5 from Worksheet_Change call''
If Target.Value <> PreviousValue Then
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = _
Application.UserName & " changed cell " & Target.Address _
& " from " & PreviousValue & " to " & Target.Value
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target.Value
End Sub
我确信这里的某个人能够使这段代码看起来更整洁,但它确实是我要求它做的事情。
答案 2 :(得分:0)
您可以在案例中使用Intersect
:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value <> PreviousValue AND Intersect(Target, Range("D4,D5,E5")) Is Nothing Then
Sheets("log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = _
Application.UserName & " changed cell " & Target.Address _
& " from " & PreviousValue & " to " & Target.Value
End If