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

时间:2015-03-08 20:04:13

标签: excel vba events

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

  1. 在我的 Worksheet_Change 事件中,在开始时我设置了 Application.events = False
    1. 然后我运行主代码,改变包括公式在内的一些东西。
    2. 完成主要代码后,我重置 Application.EnableEvents = True
    3. 然后 Worksheet_Change 事件以退出子结束。
  2. 代码完成后,即使在 Application.EnableEvents = True 之后没有代码,也会触发 Worksheet_Calculate 事件。 我不希望触发此事件
  3. 以下是代码的快照:

    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 之后没有任何内容可以触发此事件。

    谢谢你的帮助。我不明白这个。

    编辑和可能的解释

    我一直在思考和测试。这种行为可能没有任何问题。 这两个事件都是同时触发的,它必须选择一个代码才能在另一个代码之前运行。 main code内的Private Sub Worksheet_Change(ByVal Target As Range) 会触发Private Sub Worksheet_Calculate()。后者排队等待轮到他了。

2 个答案:

答案 0 :(得分:1)

您在脚本结束时重新启用自动计算,因此它会计算脚本何时完成。

  

当计算设置为自动时,在每次输入数据之后和某些事件之后都会重新计算...

请参阅此MSDN article

答案 1 :(得分:0)

您可以应用此处提到的Skip_update方法:VBA Worksheet change event bypass?我发现当您关闭它时,事件仍会触发,这一点非常奇怪。