我可以强制我的vba脚本等到Application.Calculate完成后再重新计算所有公式吗?
v64noz0r1#
作为我的补充,您可以将DoEvents与Application.CalculationState一起使用。
Application.CalculationState
Application.Calculate If Not Application.CalculationState = xlDone Then DoEvents End If '~~> Rest of the code.
如果需要,还可以使用Do While Loop检查Application.CalculationState我还建议查看此链接
Do While Loop
返回一个XlCalculationState常量,该常量指示应用程序在Microsoft Excel中执行的任何计算的计算状态。只读。
abithluo2#
接受的答案对我不起作用,因为“DoEvents在计算完成之前不会阻塞,在您的示例代码中实际上是一个空操作”。我遇到了同样的问题。
Do DoEvents Application.Calculate Loop While Not Application.CalculationState = xlDone
在手动计算模式下,有时循环进入长时间运行过程。这就是为什么在下面添加行。
Application.Calculate
6ovsh4lw3#
真不敢相信没有人发布这个解决方案,这似乎是最确定的一个...
Do While Not Application.CalculationState = xlDone If Application.CalculationState = xlPending Then Application.Calculate Application.Wait (Now + TimeValue("00:00:02")) Loop
微软文档说application.wait允许在后台进行重新计算。
laawzig24#
不幸的是,没有。在某些情况下,它不重新计算工作表,不起作用。如果它起作用了,那将是一个梦想。
4条答案
按热度按时间v64noz0r1#
作为我的补充,您可以将DoEvents与
Application.CalculationState
一起使用。如果需要,还可以使用
Do While Loop
检查Application.CalculationState
我还建议查看此链接
返回一个XlCalculationState常量,该常量指示应用程序在Microsoft Excel中执行的任何计算的计算状态。只读。
abithluo2#
接受的答案对我不起作用,因为“DoEvents在计算完成之前不会阻塞,在您的示例代码中实际上是一个空操作”。我遇到了同样的问题。
在手动计算模式下,有时循环进入长时间运行过程。这就是为什么在下面添加行。
6ovsh4lw3#
真不敢相信没有人发布这个解决方案,这似乎是最确定的一个...
微软文档说application.wait允许在后台进行重新计算。
laawzig24#
不幸的是,没有。在某些情况下,它不重新计算工作表,不起作用。如果它起作用了,那将是一个梦想。