2012-11-30 33 views
1

我是VBA的新手,並且繼承了我目前正在更新的其他人的需求跟蹤電子表格。這些需求已經與當前的VBA代碼一起正確分組和總結。我想更新的特定塊(例如,有多個層次):如何爲幾組數據動態地創建COUNTIFS公式(運行時錯誤'1004')

For groups = 1 To i ' Level 3 grouping 

    Range(Cells(Start(groups), 1), Cells(Finish(groups), 1)).Rows.Group 

    Range("G" & Start(groups) - 1).Formula = "=COUNTIF(E" & Start(groups) & ":E" & Finish(groups) & ",""Requirement"")" 

    Range("H" & Start(groups) - 1).Formula = "=COUNTIF(H" & Start(groups) & ":H" & Finish(groups) & ",""Ok"")" 

Next 

我需要一個額外的條件添加到COUNTIF,所以我使用COUNTIFS。我只想計算不是4級的要求(他們可以是1,2,3或4級)。我曾嘗試在下面的邏輯變化:

For groups = 1 To i ' Level 3 grouping 

    Range(Cells(Start(groups), 1), Cells(Finish(groups), 1)).Rows.Group 

    Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & ",""<>4"")" 

    Range("H" & Start(groups) - 1).Formula = "=COUNTIF(H" & Start(groups) & ":H" & Finish(groups) & ",""Ok"")" 

Next 

我試圖執行宏的和更新的金額正確式之前手動輸入手動在正確的細胞中的式(S)。不過,我總是得到以下,當我運行宏: 運行時錯誤「1004」 Application_defined或object_defined錯誤

我知道我有很多的報價,有的也許可以合併;但是,我更關心邏輯失敗的原因。能否請你幫忙?我在這個探索不同的途徑上花了太多時間。

預先感謝您!

在此之後,我將不得不學習如何隱藏每個「4級」要求(這意味着行和以下2行),但這是另一個話題。我以爲我會先嚐試更簡單的邏輯..

+1

最簡單的就是debug.print你的公式字符串a nd看看它有什麼問題,無論是在即時窗口還是將其複製到工作簿中。用'''= COUNTIFS ...'開始公式,然後刪除工作表中的單引號,並得到更具描述性的錯誤信息。 – nutsch

回答

2

您使用雙引號內的雙引號是您的問題。改爲使用Chr(34)

Range("G" & Start(groups) - 1).Formula = "=COUNTIFS(E" & Start(groups) & ":E" & Finish(groups) & "," & "Requirement" & ",S" & Start(groups) & ":S" & Finish(groups) & "," & Chr(34) & "<>4" & Chr(34) & ")" 

Chr()方法在您指定的索引號處返回ASCII字符。在這種情況下,Chr(34)返回雙引號字符。

http://www.asciitable.com/

編輯:

或者,你也可以使用雙雙引號,像這樣:有關ASCII字符的更多信息,如下表檢查

Range("A1").formula = "=COUNTIF(B:B,""<>4"")" 

代替

Range("A1").formula = "=COUNTIF(B:B," & Chr(34) & "<>4" & Chr(34) & ")" 
+1

謝謝!我懷疑我的錯誤與報價使用有關。但是,我不知道Chr()的用法,你的幫助爲我節省了一天的時間,然後轉向刪除行,這會給它一個很好的嘗試,但是,如果再次卡住,可能需要回復您。 – Aerogal31

+1

再次感謝您!我真的很感謝您的反饋。 – Aerogal31