从Worksheet_Change函数中排除单元格范围
我目前正在设置一个电子表格,让我可以随时随地logging每个人在办公室里的任何信息,并通过下面的代码来处理:
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
其中logging工作簿中所有单元格的任何更改。 不过,我也有这个代码:
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
这然后logging上次保存文档,我想知道是否有任何方法可以从审计代码中删除单元格D5和E5,因为这两个单元格与D4(其中包含= TODAY()公式)将经常变化,并会使我的审计线索相当大。
非常感激任何的帮助。
在您的Workbook_BeforeSave中添加:
Application.EnableEvents = False
在更改工作表之前, 一定要添加
Application.EnableEvents = True
在结束小组之前。
这可以防止Worksheet_Change
事件被触发,因此没有任何东西被写入您的日志。
多一点search后,我能find这个查询的答案:
要从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
我敢肯定,在这里有人能够使这个代码看起来更整洁,因为它是做我所要求的。
你可以在你的情况下使用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