【问题标题】:CountIf not automatically calculatingCountIf 不自动计算
【发布时间】:2017-06-05 13:05:22
【问题描述】:

如果不是自动计算,我的 countif 函数 - 我错过了什么吗?

    Option Explicit

Function my3CountIfs(Rng1 As Range, Criteria1 As String, Rng2 As Range, Criteria2 As String, Rng3 As Range, Criteria3 As String) As Long

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

    Select Case ws.Name
        Case "Summary-Sheet", "Notes", "Results", "Instructions", "Template"
            ' do nothing

        Case Else
             my3CountIfs = my3CountIfs + Application.CountIfs(ws.Range(Rng1.Address), Criteria1, ws.Range(Rng2.Address), Criteria2)

    End Select
Next ws

End Function

当我使用以下命令时,我必须手动单击它并按回车键以显示更新的答案

=my3COUNTIFS(I49,"Yes",I7,"Yes",I1, "Active")

是的,我已将 Excel 设置为自动计算。

感谢您的帮助 - 今晚在此 Excel 表上进行演示,发现它无法正常工作! - 哎呀!

【问题讨论】:

  • 听说过这个Application.Volatile...???
  • 填充了该 UDF 的单元格是否会修改您传递给该 UDF 的范围内的任何值?此外,您的函数有 Rng3Criteria3 参数,但它不使用它们
  • application.Volatile 作品 - 非常感谢@cyboashu
  • 干杯.........
  • UDF 永远不会重新计算,除非您为该 UDF 设置了 Application.Volatile。但是 - 如果大量使用 UDF,则不建议这样做,因为它会严重影响性能。

标签: vba excel countif


【解决方案1】:

正如 cyboashu 在 cmets 中提到的,您需要将 Application.Volatile 放入函数中。但正如 Rik 所说,这也可能导致性能问题。 This particular post 及其答案与您的问题相关。

只是对您可用选项的摘要:

Function xyz()
    Application.Volatile 'or Application.Volatile = True in later versions
    ...
End Function

或者一些手动按键

  • F9 重新计算所有打开的工作簿中的所有工作表
  • Shift+ F9 重新计算活动工作表
  • Ctrl+Alt+ F9 重新计算所有打开的工作簿中的所有工作表(完全重新计算)
  • Shift + Ctrl+Alt+ F9 重建依赖关系树并重新计算

或者对我有用的一个选项(因为我只需要在每次运行特定宏时重新计算我的 UDF)是使用 SendKeys,如下所示:

Sub xyz()
    ...
    'Recalculates all formulas by simulating keypresses for {ctrl}{alt}{shift}{F9}
    SendKeys "^%+{F9}"
    ...
End Sub

(Here's the MSDN page for SendKeys)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多