Worksheet_Calculate 在没有任何触发器的情况下运行
Worksheet_Calculate runs without any trigger
我遇到了一个奇怪的事件行为,我不明白。请帮忙。以下是对问题的解释。
- 在我的 Worksheet_Change 事件中,一开始我设置了 Application.events = False。
- 然后我 运行 主要代码改变了一些东西,包括公式。
- 主要代码完成后,我重置了 Application.EnableEvents = True。
- 然后 Worksheet_Change 事件结束于 Exit Sub.
- 代码完成后立即触发 Worksheet_Calculate 事件,即使在 Application.EnableEvents = True。
我不想触发此事件。
这是代码的快照:
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后没有任何东西触发这个事件。
感谢您的帮助。这个没看懂
编辑和可能的解释
我一直在思考和测试。这种行为可能没有错。
这两个事件同时触发,它必须先选择一个代码 运行 到另一个。 Private Sub Worksheet_Change(ByVal Target As Range)
内的 main code
是 而不是 触发 Private Sub Worksheet_Calculate()
。后者在队列中,等待轮到。
您在脚本结束时重新启用自动计算,因此它会在脚本完成时进行计算。
When calculation is set to automatic, recalculation occurs after every data input and after certain events...
请看这个MSDN article。
您也许可以应用此处提到的 Skip_update 方法:VBA Worksheet change event bypass? 我确实发现当您关闭它们时事件仍然触发是很奇怪的。
我遇到了一个奇怪的事件行为,我不明白。请帮忙。以下是对问题的解释。
- 在我的 Worksheet_Change 事件中,一开始我设置了 Application.events = False。
- 然后我 运行 主要代码改变了一些东西,包括公式。
- 主要代码完成后,我重置了 Application.EnableEvents = True。
- 然后 Worksheet_Change 事件结束于 Exit Sub.
- 代码完成后立即触发 Worksheet_Calculate 事件,即使在 Application.EnableEvents = True。 我不想触发此事件。
这是代码的快照:
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后没有任何东西触发这个事件。
感谢您的帮助。这个没看懂
编辑和可能的解释
我一直在思考和测试。这种行为可能没有错。
这两个事件同时触发,它必须先选择一个代码 运行 到另一个。 Private Sub Worksheet_Change(ByVal Target As Range)
内的 main code
是 而不是 触发 Private Sub Worksheet_Calculate()
。后者在队列中,等待轮到。
您在脚本结束时重新启用自动计算,因此它会在脚本完成时进行计算。
When calculation is set to automatic, recalculation occurs after every data input and after certain events...
请看这个MSDN article。
您也许可以应用此处提到的 Skip_update 方法:VBA Worksheet change event bypass? 我确实发现当您关闭它们时事件仍然触发是很奇怪的。