2017-08-16 21 views
1

我遇到的问题通常与Change事件有关:如何解决变化事件的无限循环?

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

的问题是现在以下几点:

如果有什么改变时,则触发事件的变化和改变一些事情(细胞,列表,过滤器等。),这将触发相同的事件。像这样你会得到一个无限循环的变化事件。我目前的解决方案是follwing:

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 

所以基本上我对enableing和禁用我自己使用更改事件绕过这个问题。

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

+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项目被重置您的活动工作。

+0

oke,谢谢。 –

0

将放在您的Worksheet_Change子内部,然后再运行您的代码。当您的代码完成后,请使用Application.EnableEvents = True重新开启事件。

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