Excel VBA等待Application.calculatefull

当我调用Application.calculatefull并在下一个语句中放置一个断点时,我在状态栏中看到处理器处理一段时间之后,但已经到达下一行代码。

我检查了论坛和人们build议使用DoEvents。 在我的情况下是一个问题。 由于工作表有许多公式,其中一些在第一次运行后显示错误的结果,虽然公式是正确的,所以当我调用calculateFull工作表,它纠正,但不等待

如果我使用DOEvents,CalculateFull不会更新工作表。

所以我正在修复。

请指教我如何等待处理器完成处理应用程序。计算完成后,只能到下一行代码。

我也使用了application.wait,但它似乎持有处理器,一旦释放它开始计算然后,这不能解决我的问题。


waittime (1000) SendKeys "+^%{F9}", True Application.CalculateFullRebuild 

这是我现在使用的代码。 当我把断点放在下一行代码时,我看到application.calculatefullRebuild需要几秒钟,然后进入下一行,当我检查activesheet现在,在另外的2-3秒我看到状态栏计算(4处理器):xx%,之后将工作表值更改为正确的值

这是我的问题。 当Application.CalculateFullRebuild完成并转到下一行时,我的工作表结果仍不准确,只有几秒钟后处理器计算状态栏消息,工作表才会更新。

我怎么才能等待这个完成,否则剩下的代码将会得到错误的结果。

所以我相信这里的问题有你正在寻找的答案(稍微修改,以便在while循环中):

 Do While Application.CalculationState <> xlDone DoEvents Loop 

开始计算过程之后,在代码中坚持上面的循环应该是所有必需的。

我使用了与定时器Brad一样的解决scheme来通知用户是否出现问题。 我发现,如果不触发Application.Calculate命令(或CalculateFull),Excel不会继续通过DoEvents进行计算。

 Const MAXTIME_S = 10 Dim t As Double t = Timer() If Application.CalculationState <> xlDone Then Application.Calculate Do While Application.CalculationState <> xlDone DoEvents If Timer() - t > MAXTIME_S Then Exit Do Loop If Application.CalculationState <> xlDone Then MsgBox "Calculation not done. Please restart this Macro.", vbInformation + vbOKOnly, "Aktualisieren" Exit Sub End If