【发布时间】:2012-06-30 19:30:21
【问题描述】:
我可以强制我的 vba 脚本等到 Application.Calculate 完成重新计算所有公式吗?
【问题讨论】:
-
在
Application.Calculate之后添加DoEvents
我可以强制我的 vba 脚本等到 Application.Calculate 完成重新计算所有公式吗?
【问题讨论】:
Application.Calculate之后添加DoEvents
除了我的 cmets,您还可以将 DoEvents 与 Application.CalculationState 一起使用。看这个例子
Application.Calculate
If Not Application.CalculationState = xlDone Then
DoEvents
End If
'~~> Rest of the code.
如果您愿意,也可以使用Do While Loop 来检查Application.CalculationState
我也建议您查看此链接
主题:Application.CalculationState 属性
链接:http://msdn.microsoft.com/en-us/library/bb220901%28v=office.12%29.aspx
以上链接引述
返回一个 XlCalculationState 常量,该常量指示应用程序的计算状态,用于在 Microsoft Excel 中执行的任何计算。只读。
【讨论】:
DoEvents 是您想要将控制权传递给操作系统以便它可以完成处理其队列中的事件时所必需的。通常一个就足够了,但您可以在一个循环中发出多个DoEvents 以不断将控制权传回以确保处理队列中的所有事件。例如,在复制和粘贴之间,一个DoEvents 就足够了。在上面的示例中,您可能必须在 Do While 循环中发出相同的内容。
接受的答案对我不起作用,因为“DoEvents 在计算完成之前不会阻塞,并且在您的示例代码中实际上是一个无操作”我遇到了同样的问题。最后this 解决方案对我有用。
Do
DoEvents
Application.Calculate
Loop While Not Application.CalculationState = xlDone
在手动计算模式下,有时 while 循环会进入长时间运行的过程。这就是为什么添加到下面的行。
Application.Calculate
【讨论】: