Worksheet_Calculate 在没有任何触发器的情况下运行

Worksheet_Calculate runs without any trigger

我遇到了一个奇怪的事件行为,我不明白。请帮忙。以下是对问题的解释。

  1. 在我的 Worksheet_Change 事件中,一开始我设置了 Application.events = False
    1. 然后我 运行 主要代码改变了一些东西,包括公式。
    2. 主要代码完成后,我重置了 Application.EnableEvents = True
    3. 然后 Worksheet_Change 事件结束于 Exit Sub.
  2. 代码完成后立即触发 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? 我确实发现当您关闭它们时事件仍然触发是很奇怪的。