等待Application.Calculate完成

问题描述 投票:0回答:4

我可以强制我的 vba 脚本等到 Application.Calculate 完成后再重新计算所有公式吗?

events vba excel
4个回答
38
投票

除了我的评论之外,您可以将 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 中执行的任何计算)。只读。


2
投票

接受的答案对我不起作用,因为“DoEvents 在计算完成之前不会阻塞,并且在示例代码中实际上是无操作”我也遇到了同样的问题。最后这个解决方案对我有用。

Do
    DoEvents
    Application.Calculate
Loop While Not Application.CalculationState = xlDone

在手动计算模式下,有时 while 循环会进入长时间运行的过程。这就是为什么添加下面一行。

Application.Calculate

0
投票

不敢相信没有人发布这个解决方案,这似乎是最终的解决方案......

Do While Not Application.CalculationState = xlDone
    If Application.CalculationState = xlPending Then Application.Calculate
    Application.Wait (Now + TimeValue("00:00:02"))
Loop

微软文档说 application.wait 允许在后台重新计算。


0
投票

Application.Calculate
对我不起作用,我必须删除
Application.
并使用它:

Do
    DoEvents
    Calculate
Loop While Not CalculationState = xlDone

知道为什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.