只有在手动更改时才为其他单元格运行不同的macros

我的问题是,我写的macros改变了单元格的值再次触发一个macros来改变其他单元格之一。

Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range For Each cell In Target If Not Intersect(cell, Range("c2")) Is Nothing Then Macro1 ElseIf Not Intersect(cell, Range("C3")) Is Nothing Then Macro2 ElseIf Not Intersect(cell, Range("d8")) Is Nothing Then Macro3 End If Next cell End Sub 

运行的macros总是会改变其他单元,这是什么使它成为一个无限循环。

有没有办法只手动input/更改单元让macros运行?

两个解决scheme:

  1. 在_change事件的开始处添加Application.EnableEvents = False ,并在最后将其设置为True
  2. 创build一个公共布尔值来testing你是否已经自动更新

像这样(解决scheme2):

 Public DisableEvents As Boolean Private Sub Worksheet_Change(ByVal Target As Range) If DisableEvents Then Exit Sub DisableEvents = True Dim cell As Range For Each cell In Target If Not Intersect(cell, Range("c2")) Is Nothing Then Macro1 ElseIf Not Intersect(cell, Range("C3")) Is Nothing Then Macro2 ElseIf Not Intersect(cell, Range("d8")) Is Nothing Then Macro3 End If Next cell DisableEvents = False End Sub Sub Macro1() If DisableEvents Then Exit Sub 'Rest of your code End Sub