如何通过检查两个条件来获取特定对象的计数

时间:2013-02-27 20:17:21

标签: vba excel-vba excel

我必须为以下场景编写一个宏:

我有一本有一张纸的excel书。 Sheet包含带有测试用例和测试状态的模块名称。我必须将测试用例计入特定模块的测试状态,如“Mod1”。

Module    Test Case ID    Status
Mod1            123         Pass
Mod2            124         Fail
Mod1            125         Fail
Mod1            126         Blocked
Mod5            127         Pass
Mod1            128         NA

我写的代码如下:

Sub testnw()

Dim k, l, ps, fl, bl, na As Integer

Dim frng As Range


ps = 0
fl = 0
bl = 0
na = 0
frng = Worksheets(1).Range("A1")


k = 1
l = 1
       While (frng.Cells(k, l).Value <> "")

        If frng.Cells(k, l).Value = "Mod1" Then
            If frng.Cells(k, l + 2).Value = "Pass" Then
            ps = ps + 1
            ElseIf frnng.Cells(k, l + 2).Value = "Fail" Then
            fl = fl + 1
            ElseIf frng.Cells(k, l + 2).Value = "Blocked" Then
            bl = bl + 1
            Else
            na = na + 1
            End If
        End If
    Wend
MsgBox (ps)
MsgBox (fl)
MsgBox (bl)
MsgBox (na)
End Sub

运行上面的代码我收到的错误信息是“对象变量或没有设置块变量”。

有人能告诉我哪里错了,并给我正确的代码吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

错误在这一行:

frng = Worksheets(1).Range("A1")

当您使用Object(不是简单变量)时,需要SET命令:

set frng = Worksheets(1).Range("A1")

有关 LET SET

的更多信息,请参阅this question

答案 1 :(得分:1)

正如Peter Albert所说,你真的应该用Pivot Table来做这件事。重新创建方向盘是没有意义的,除非你在VBA中有非常特殊的需求。

如果您对数据透视表中的情况感到好奇,请按照以下步骤创建:

1.突出显示数据范围(模块,测试用例ID,测试状态)

2.转到插入 - &gt;数据透视表,然后单击“确定”

enter image description here

3.PivotTable Field List下方,拖动:

  • Module行标签
  • Test Case ID
  • Status列标签

enter image description here

以下是结果表的样子:

enter image description here

如果这不是您要查找的完全视图,则可以使用PivotTable Field List值(例如切换StatusTest Case ID)直到你找到一个适合你需要的那个。