Worksheet_Calculate无任何触发器运行

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

  1. 在我的Worksheet_Change事件,在开始我已经设置Application.events = False
    1. 然后我运行主要代码,改变一些东西,包括公式。
    2. 主代码完成后,重置Application.EnableEvents = True
    3. 然后Worksheet_Change事件在Exit Sub结束。
  2. 在代码完成之后,即使在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的时候,我确实觉得很奇怪。