从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 
Interesting Posts