2013-10-09 81 views
1

我有这个代码,我正在使用调用旧值和新值。然而,现在我遇到了一个问题,如果用户只是突出显示并点击删除,它将运行并记录该更改,但由于某种原因它将运行同一请求的多个实例。有没有办法让它只运行一次? 感谢更改旧值和新值

Public OldValues As New Collection 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Sheets("Pagination").Range("J11") <> "Yes" Then Exit Sub 

    'Copy old values 
    Set OldValues = Nothing 
    Dim c As Range 
    For Each c In Target 
     OldValues.Add c.Value, c.Address 
    Next c 
End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 

If Sheets("Pagination").Range("J11") <> "Yes" Then Exit Sub 

    On Local Error Resume Next ' To avoid error if the old value of the cell address you're looking for has not been copied 
    Dim c As Range 
    For Each c In Target 
     Sheets("corrections").Cells(Rows.Count, "A").End(xlUp)(2).Value = Now & " Sheet " & ActiveSheet.Name & " Cell " & Target.Address(0, 0) & " has a new value of " & c.Value & "; old value was " & OldValues(c.Address) 
    Next c 
    'Copy old values (in case you made any changes in previous lines of code) 
    Set OldValues = Nothing 
    For Each c In Target 
     OldValues.Add c.Value, c.Address 
    Next c 
End Sub 
+0

你是什么意思'突出一个'? “更多实例”是什么意思?可能问题可以通过[本答案](http://stackoverflow.com/a/17405206/2143262)中所述的方式解决。 –

+0

如果你点击单元格B5上的删除,例如,这是你得到的10/9/2013 9:41:15 AM Sheet UCF(2)单元格B5:AE5有一个新的值;旧值为5 10/9/2013 9:41:15 AM Sheet UCF(2)单元格B5:AE5具有新的值;旧值为 10/9/2013 9:41:15 AM Sheet UCF(2)单元格B5:AE5具有新的值;旧值为 10/9/2013 9:41:15 AM Sheet UCF(2)单元格B5:AE5具有新的值;旧值是 – imageicb

+0

解决方案是在我的链接或在下面的答案... –

回答

1

添加Application.EnableEvents = FalseWorksheet_Change事件的开始,然后回到Application.EnableEvents = True在它的结束。

编辑:我不能自己重新创建您的问题,并且由于宏没有在同一张纸上进行更改,因此上述解决方案不应有所作为。 “更正”工作表上是否有其他Worksheet_Change事件,您需要禁用这类事件?


Application.EnableEvents应也可添加到其他功能 可以afftect在片材,其具有的worksheet_change事件的任何细胞。

例如,即使Cell A1的值更改了worksheet_change事件,也会被调用。