我可以强制我的 vba 脚本等到 Application.Calculate 完成后再重新计算所有公式吗?
除了我的评论之外,您可以将 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 在计算完成之前不会阻塞,并且在示例代码中实际上是无操作”我也遇到了同样的问题。最后这个解决方案对我有用。
Do
DoEvents
Application.Calculate
Loop While Not Application.CalculationState = xlDone
在手动计算模式下,有时 while 循环会进入长时间运行的过程。这就是为什么添加下面一行。
Application.Calculate
不敢相信没有人发布这个解决方案,这似乎是最终的解决方案......
Do While Not Application.CalculationState = xlDone
If Application.CalculationState = xlPending Then Application.Calculate
Application.Wait (Now + TimeValue("00:00:02"))
Loop
微软文档说 application.wait 允许在后台重新计算。
Application.Calculate
对我不起作用,我必须删除 Application.
并使用它:
Do
DoEvents
Calculate
Loop While Not CalculationState = xlDone
知道为什么吗?