2012-11-30 16 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