Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 工作表\u计算不带任何触发器的运行_Excel_Vba_Events - Fatal编程技术网

Excel 工作表\u计算不带任何触发器的运行

Excel 工作表\u计算不带任何触发器的运行,excel,vba,events,Excel,Vba,Events,我遇到了一个奇怪的事件行为,我不理解。请帮忙。下面是对这个问题的解释 在我的工作表\u Change事件中,在开始时,我设置了Application.events=False。 然后我运行主代码,它几乎不改变任何东西,包括公式 主代码完成后,我重置应用程序。EnableEvents=True 然后工作表\u Change事件在退出子节点结束 代码完成后,它会立即触发工作表\u Calculate事件,即使应用程序之后没有代码。EnableEvents=True。 我不希望触发此事件 下面是代码

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

  • 在我的工作表\u Change事件中,在开始时,我设置了Application.events=False
  • 然后我运行主代码,它几乎不改变任何东西,包括公式
  • 主代码完成后,我重置应用程序。EnableEvents=True
  • 然后工作表\u Change事件在退出子节点结束
  • 代码完成后,它会立即触发工作表\u Calculate事件,即使应用程序之后没有代码。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
    
    所以问题是:在代码结束后,它怎么可能立即触发工作表\u Calculate事件?Application.EnableEvents=True之后没有任何内容可触发此事件

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

    编辑和可能的解释 我一直在思考和测试。这种行为可能没有什么错。
    这两个事件同时触发,它必须先选择一个代码来运行另一个代码。
    私有子工作表内的
    主代码
    更改(ByVal目标作为范围)
    未触发
    私有子工作表计算()。后者在队列中,等待轮到它。

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

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


    请看此图。

    您也许可以应用此处提到的跳过更新方法:我确实觉得很奇怪,当您关闭它们时,事件仍然会触发。

    我相信在每次工作表更改后都会自动计算。谢谢您的回复。我将使用跳过更新方法。无论如何,我还是不明白为什么工作表会触发事件。必须做更多的测试和调试。谢谢豪猪911。您所说的是正确的,但我完全不知道触发工作表\u Calculate事件的原因(没有数据输入或任何其他事件)。Application.EnableEvents=True和Exit Sub之间没有代码或用户操作。我知道,当我重新启用事件,然后进行触发工作表\u Calculate事件的更改时,它必须触发。但我没有这样做。至少我现在还没有意识到。我在想,也许宏的完成会触发重新设计。也许做个小测试?结果证明,你是对的。我在思考中犯了一个错误,认为我的过程触发了calculate事件,但它甚至在代码运行之前就被触发了。它只是在排队等候。谢谢你的帮助和时间。