2013-02-27 83 views
0

我必须写为以下情形的宏得到perticular对象的数量。工作表包含带有测试用例和测试状态的模块名称。我必须将测试用例与特定模块的测试状态统称为“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 

上运行我收到错误消息上述代码是“对象变量或With块变量未设置”。

有人可以告诉我我错在哪里,并得到我正确的代码?

在此先感谢。

+2

你需要在VBA中做到吗?如果不是,数据透视表将帮助您在几秒钟内完成工作:根据您的工作表插入数据透视表。在行字段中放置“模块”,在列字段中放置“状态”,在值字段中放置“测试用例ID”。如果测试用例是数字的,则需要将聚合方法从SUM更改为COUNT。完成! :-) – 2013-02-27 20:21:45

+0

注意'k','l','ps','fl'和'bl'已被声明为'Variant'。要将它们全部声明为整数,需要:'Dim k As Integer,l As Integer'等等 – barrowc 2013-02-27 23:19:43

+0

谢谢Peter ...-但我必须用excel宏来做到这一点。我使用三张不同的工作表来挑选数据。这只是我试图通过将其他Excel数据放在同一张Excel表格中来检查代码。 :) – 2013-02-28 06:28:53

回答

1

误差在这一行:

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

为您使用的对象(不是一个简单的变量),则需要一个SET命令:

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

上看到this question以获取更多信息LET and SET

+0

@肖恩...我使用SET命令,但仍然没有得到正确的输出,它给我“0”作为所有变量的输出。 – 2013-02-28 07:21:35

+0

你有没有单步执行代码,看看哪里掉了循环? (F8)另外,你有没有把Option Explicit拿来拼写错误? – SeanC 2013-02-28 13:06:04

1

正如Peter Albert所说,y你真的应该使用Pivot Table这个。重新创建轮子是没有意义的,除非您在VBA中有这样的特殊需求。

如果你想知道这是什么样子的数据透视表,这里是如何去创造一个:

1.突出显示的数据(模块,测试用例编号,测试状态)

范围2.转到插入 - >透视表,然后单击确定

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),直到找到适合您的需求。