我在打开/关闭几本书,拉动数据等长链中的一系列单元格中应用了一堆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%
有没有更好的方法将相同的逻辑应用于我的细胞?
答案 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
是加快速度的另一个好方法