Excel VBA单击过早结束计算

时间:2018-02-19 12:04:42

标签: excel vba excel-vba

我在打开/关闭几本书,拉动数据等长链中的一系列单元格中应用了一堆countif。

ws_DAT.Range("C6:C" & lROW1).Formula = "=COUNTIFS('Database'!A:A,'DAT'!A6,'Database'!D:D,""Flagged"")"

这有一些问题 -

如果我点击Excel上的任何地方,COUNTIF计算将停止,vba代码会跳到下一行,因此我最终会得到一堆零 - 为什么会发生这种情况?如何防止这种情况发生?

此外,当在Excel中手动执行此操作时,即使在代码中我将screenupdating设置为false也会更快 - 如果我手动执行此操作,我可以看到Excel"计算&#34 34;高达100%但是当通过宏执行此操作时它不会显示 - 是否有任何方法可以显示calc%

有没有更好的方法将相同的逻辑应用于我的细胞?

1 个答案:

答案 0 :(得分:0)

您可以强制使用ws_DAT.Calculate计算工作表,或使用ws_DAT.Columns(3).Calculate进行更新,并且宏在完成之前不会进展。

您可以使用此代码加快计算以防止值为0:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
ws_DAT.Range("C6:C" & lROW1).Formula = "=COUNTIFS('Database'!A:A,'DAT'!A6,'Database'!D:D,""Flagged"")"
ws_DAT.Calculate
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

一般来说,除非写得非常简短。快速宏,我发现没有理由不在代码开头设置Application.Calculation = xlCalculationManual并在结尾返回xlCalculationAutomatic。在宏的持续时间内设置Application.ScreenUpdating=False是加快速度的另一个好方法