Excel VBA目标单元格发生更改,然后忽略

Excel VBA目标单元格发生更改,然后忽略,vba,excel,Vba,Excel,我有一个宏,它可以检测一个单元格何时被更改,并将这个数字添加到它上面的单元格中 然而,我需要清除原始单元格,当该单元格再次被更改时,它总是再次触发宏,我结束了一个无休止的循环。在宏运行时,是否有办法“忽略”任何其他单元格更改 Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("B3:O3") If Not Application.Intersect(Ke

我有一个宏,它可以检测一个单元格何时被更改,并将这个数字添加到它上面的单元格中

然而,我需要清除原始单元格,当该单元格再次被更改时,它总是再次触发宏,我结束了一个无休止的循环。在宏运行时,是否有办法“忽略”任何其他单元格更改

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("B3:O3")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    If Range(Target.Address).Cells.Count = 1 Then
        Range(Target.Address).Offset(-1).Value = Range(Target.Address).Offset(-1).Value + Range(Target.Address).Value
        Range(Target.Address).Clear
    End If
End If

End Sub

您可以添加其他条件:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("A3:O3")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing And Range(Target.Address).Value <> "" Then
    If Range(Target.Address).Cells.Count = 1 Then
        Range(Target.Address).Offset(-1).Value = Range(Target.Address).Offset(-1).Value + Range(Target.Address).Value
        Range(Target.Address).Clear
    End If
End If

End Sub
Private子工作表\u更改(ByVal目标作为范围)
暗淡的关键单元格作为范围
设置关键单元=范围(“A3:O3”)
如果不是Application.Intersect(keycell,Range(Target.Address))则为Nothing,Range(Target.Address).Value则为“”
如果Range(Target.Address).Cells.Count=1,则
范围(Target.Address).偏移量(-1).值=范围(Target.Address).偏移量(-1).值+范围(Target.Address).值
范围(目标地址)。清除
如果结束
如果结束
端接头

或只需添加
应用程序。如下所示启用事件:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("B3:O3")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    If Range(Target.Address).Cells.Count = 1 Then
        Application.EnableEvents = False
        Range(Target.Address).Offset(-1).Value = Range(Target.Address).Offset(-1).Value + Range(Target.Address).Value
        Range(Target.Address).Clear
        Application.EnableEvents = True
    End If
End If

End Sub

您可以使用
Application.EnableEvents
阻止循环发生。添加附加条件仍会触发更改事件3次。一种有趣的方法,但效率不高。