【问题标题】:Wait until Application.Calculate has finished等到 Application.Calculate 完成
【发布时间】:2012-06-30 19:30:21
【问题描述】:

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

【问题讨论】:

  • Application.Calculate之后添加DoEvents

标签: events vba excel


【解决方案1】:

除了我的 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 将不会阻塞,并且在您的示例代码中实际上是无操作的。
  • same here...我仍然看到#REF,#N/A 表示计算尚未完成,尽管它退出了块...
  • @user65 任何替代解决方案?我有同样的问题。
  • 悉达多,知道什么时候需要那个 DoEvents 吗?知道为什么最多只有一个就足够了吗?
  • @stenci: DoEvents 是您想要将控制权传递给操作系统以便它可以完成处理其队列中的事件时所必需的。通常一个就足够了,但您可以在一个循环中发出多个DoEvents 以不断将控制权传回以确保处理队列中的所有事件。例如,在复制和粘贴之间,一个DoEvents 就足够了。在上面的示例中,您可能必须在 Do While 循环中发出相同的内容。
【解决方案2】:

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

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

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

Application.Calculate

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2011-12-17
    • 2011-01-29
    • 2021-08-09
    相关资源
    最近更新 更多