2017-01-20 20 views
3

如果不自動計算我的countif函數 - 我是否缺少某些東西?Count如果不自動計算

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表格上發佈演示文稿,並發現它無法正常工作! - 嗨!

+4

聽到這個'Application.Volatile' ... ??? – cyboashu

+0

填充了該UDF的單元格是否修改了您傳遞給該UDF的範圍中的任何值?此外你的函數有'Rng3'和'Criteria3'參數,但它不使用它們 – user3598756

+2

application.Volatile作品 - 非常感謝你@cyboashu –

回答

0

Astropolashu在評論中提到,你需要把Application.Volatile放在函數中。但是正如Rik所說,這也可能導致性能問題。 This particular post及其答案與您的問題相關。

僅有的可用選項爲您總結:

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

或者部分手動按鍵

  • F9重新計算所有工作表中的所有打開的工作簿
  • + F9重新計算活動工作表
  • 按Ctrl + Alt鍵 + F9重新計算所有工作表中的所有打開的工作簿(完整計算)
  • + 按Ctrl + Alt鍵 + F9重建的依賴關係樹和執行全重新計算

或者對我有用的選項(因爲我只需要我的UDFs recalcu每個我跑了一個特定的宏)是使用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