Worksheet_Calculate无任何触发器运行
我遇到了一个奇怪的事件行为,我不明白。 请帮忙。 以下是对问题的解释。
- 在我的Worksheet_Change事件,在开始我已经设置Application.events = False 。
- 然后我运行主要代码,改变一些东西,包括公式。
- 主代码完成后,重置Application.EnableEvents = True 。
- 然后Worksheet_Change事件在Exit Sub结束。
- 在代码完成之后,即使在Application.EnableEvents = True之后没有代码,也会触发Worksheet_Calculate事件。 我不希望这个事件被触发 。
这是一个代码的快照:
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Main code Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True Exit Sub Private Sub Worksheet_Calculate() 'triggered without any reason? ... 'code here exit sub
所以问题是:在代码结束后,它如何可能立即触发Worksheet_Calculate事件? Application.EnableEvents = True后没有任何事件触发此事件。
谢谢你的帮助。 我不明白这一个。
编辑和可能的解释
我一直在思考和testing。 这种行为可能没有错。 两个事件同时触发,必须select一个代码才能在另一个之前运行。 Private Sub Worksheet_Change(ByVal Target As Range)
的main code
不会触发Private Sub Worksheet_Calculate()
。 后者排队等待轮到。
您可以在脚本末尾重新启用自动计算,以便计算脚本何时完成。
当计算设置为自动时,重新计算发生在每个数据input和某些事件之后…
请参阅此MSDN文章 。
你也许可以应用这里提到的Skip_update方法: VBA Worksheet change event bypass? 事实上,当你把它们closures的时候,我确实觉得很奇怪。