Excel 工作表\u计算不带任何触发器的运行
我遇到了一个奇怪的事件行为,我不理解。请帮忙。下面是对这个问题的解释Excel 工作表\u计算不带任何触发器的运行,excel,vba,events,Excel,Vba,Events,我遇到了一个奇怪的事件行为,我不理解。请帮忙。下面是对这个问题的解释 在我的工作表\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事件,但它甚至在代码运行之前就被触发了。它只是在排队等候。谢谢你的帮助和时间。