首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Worksheet_Change函数中排除单元格范围

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

Stack Overflow用户
提问于 2015-04-14 13:09:51
回答 3查看 1.2K关注 0票数 0

目前,我正在尝试建立一个扩展表,它将允许我跟踪办公室中的任何人每次更改其中的任何信息,我已经通过以下代码来处理这个问题:

代码语言:javascript
复制
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
代码语言:javascript
复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 PreviousValue = Target.Value
End Sub

记录对工作簿中所有单元格的任何更改。不过,我也有这样的代码:-

代码语言:javascript
复制
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 (包含= way ()公式)将经常更改,使我的审计跟踪变得相当大。

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-14 13:45:24

在您的Workbook_BeforeSave中添加:

Application.EnableEvents = False

在更改工作表之前--,但请确保添加

代码语言:javascript
复制
Application.EnableEvents = True

在结束分庭之前。

这将防止触发Worksheet_Change事件,因此不会将任何内容写入日志。

票数 1
EN

Stack Overflow用户

发布于 2015-04-14 13:45:57

经过更多的搜索,我找到了这个查询的答案:-

要从Worksheet_Change函数中排除某些单元格,只需为有关单元添加以下代码行:

代码语言:javascript
复制
 If Target.Address = "Cell number" Then Exit Sub

最终代码将如下所示:

代码语言:javascript
复制
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

我相信这里的人将能够使这段代码看起来更整洁,尽管它可以完成我需要它做的事情。

票数 0
EN

Stack Overflow用户

发布于 2015-04-14 13:52:30

您可以在您的情况下使用Intersect

代码语言:javascript
复制
 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29628220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档