如何解决变化事件的无限循环?

时间:2017-08-16 12:25:57

标签: excel vba excel-vba

我对Change事件有一个问题:

我设计了一个用户表单和工作表,如果用户更改过滤器或单元格等内容,则会更新。

问题现在如下:

如果更改了某些内容,则会触发更改事件并更改某些内容(单元格,列表,过滤器等),这会触发相同的事件。像这样你将获得无限循环的变化事件。我目前的解决方案是:

Public EventsEnabled as boolean

Sub Change_Event()
If EnableEvents Then
EnableEvents=False
   enter code which cannot triggers Change_Event here
End If
EnableEvents=True
End Sub

所以基本上我通过启用和禁用我自己使用的更改事件来绕过这个问题。

现在的问题是:这是最好的解决方案还是有更容易,更快或更优雅的东西?

2 个答案:

答案 0 :(得分:2)

IMO这是最可靠的解决方案,只要您将代码更改为:

Public EventsDisabled as boolean

Sub Change_Event()
If EventsDisabled Then Exit Sub
EventsDisabled=True
   enter code which cannot triggers Change_Event here
EventsDisabled=False
End Sub

这些更改可确保您的事件在重置VBA项目时有效。

答案 1 :(得分:0)

在运行代码之前,将Application.EnableEvents = False放入Worksheet_Change子内。代码完成后,使用Application.EnableEvents = True重新启用事件。

这可以防止Excel在代码运行时触发事件(如Worksheet_Change)。