从Worksheet_Change函数中排除单元格范围

时间:2015-04-14 13:09:52

标签: excel vba excel-vba audit-trail

我目前正在尝试设置一个电子表格,这样我就可以跟踪每次办公室中有人更改其中的任何信息时,我可以通过以下代码使用它: -

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()公式)会经常变化,会使我的审计工作变得相当大。

任何帮助都将非常感激。

3 个答案:

答案 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