1

我是 VBA 新手,并从其他人那里继承了一个需求跟踪电子表格,我目前正在更新该电子表格。需求已与当前的 VBA 代码正确分组和汇总。我尝试更新的特定块(例如,有多个级别):

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

在执行宏之前,我尝试在正确的单元格中手动输入公式,并且公式正确更新了总和。但是,当我运行宏时,我总是得到以下信息: RunTime Error '1004' Application_defined or object_defined error

我意识到我有很多报价,有些可能可以合并;但是,我更关心逻辑为何失败。能否请你帮忙?我花了太多时间探索不同的途径。

先感谢您!

在此之后,我将不得不学习如何隐藏每个“4 级”要求(这意味着该行和以下 2 行),但这是另一个主题。我想我会先尝试更简单的逻辑..

4

1 回答 1

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) 返回双引号字符。有关 ASCII 字符的更多信息,请查看下表:

http://www.asciitable.com/

编辑:

或者,您也可以使用双双引号,如下所示:

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

代替

Range("A1").formula = "=COUNTIF(B:B," & Chr(34) & "<>4" & Chr(34) & ")"
于 2012-11-30T19:09:29.873 回答