从 Worksheet_Change 函数中排除单元格范围
Exclude Cell Range from Worksheet_Change function
我目前正在尝试设置一个传播 sheet 这将允许我跟踪每次办公室里有人更改其中的任何信息,我已经通过以下方式实现了这一点代码:-
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 () 公式) 会经常更改,这会使我的审计线索相当大。
如有任何帮助,我们将不胜感激。
在您的 Workbook_BeforeSave 中添加:
Application.EnableEvents = False
换床单前但一定要加上
Application.EnableEvents = True
结束子之前
这可以防止触发 Worksheet_Change
事件,因此不会将任何内容写入您的日志。
经过更多搜索,我找到了这个查询的答案:-
要从 Worksheet_Change 函数中排除某些单元格,您只需为相关单元格添加以下代码行:-
If Target.Address = "Cell number" Then Exit Sub
最终代码将如下所示:-
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D" Then Exit Sub
If Target.Address = "$E" 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
我目前正在尝试设置一个传播 sheet 这将允许我跟踪每次办公室里有人更改其中的任何信息,我已经通过以下方式实现了这一点代码:-
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 () 公式) 会经常更改,这会使我的审计线索相当大。
如有任何帮助,我们将不胜感激。
在您的 Workbook_BeforeSave 中添加:
Application.EnableEvents = False
换床单前但一定要加上
Application.EnableEvents = True
结束子之前
这可以防止触发 Worksheet_Change
事件,因此不会将任何内容写入您的日志。
经过更多搜索,我找到了这个查询的答案:-
要从 Worksheet_Change 函数中排除某些单元格,您只需为相关单元格添加以下代码行:-
If Target.Address = "Cell number" Then Exit Sub
最终代码将如下所示:-
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D" Then Exit Sub
If Target.Address = "$E" 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