是否可以在处理同一事件时自动禁用Excel Worksheet_Change事件?

win*_*aed 3 excel events vba excel-vba

我有以下代码连接到InputSheet的Worksheet_Change事件:

Private Sub Worksheet_Change(ByVal Target As Range)
  ' First, make sure we're working with an InputRange cell
  ' ALL OTHER CELLS: Exit, no action
  Dim rngCells As Range
  Set rngCells = Intersect(Target, InputSheet.Range("InputRange"))
  If rngCells Is Nothing Then
       Exit Sub
  End If

  ' Do interesting stuff that updates InputSheet
End Sub
Run Code Online (Sandbox Code Playgroud)

此代码仅用于处理单元格子集(InputRange),但更新此范围之外的其他单元格.每个更新(可能有几百个)都会触发Worksheet_Change事件.

有没有办法在执行期间禁用它,然后在最后重新启用?

例如.某些语言有函数调用来执行此操作,或者甚至在VBA中,可以通过暂停计时器来禁用计时器事件.

我可以添加一个简单的标志,这将避免Intersect通话.毫无疑问,这会提高速度,但仍会导致不必要的事件回调.

Exc*_*ero 5

是:

Application.EnableEvents = False
Run Code Online (Sandbox Code Playgroud)

然后,当您完成该过程时:

Application.EnableEvents = True
Run Code Online (Sandbox Code Playgroud)