我必须为以下场景编写一个宏:
我有一本有一张纸的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
运行上面的代码我收到的错误信息是“对象变量或没有设置块变量”。
有人能告诉我哪里错了,并给我正确的代码吗?
提前致谢。
答案 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;数据透视表,然后单击“确定”
3.
在PivotTable Field List
下方,拖动:
Module
到行标签,Test Case ID
至值 Status
到列标签
以下是结果表的样子:
如果这不是您要查找的完全视图,则可以使用PivotTable Field List
值(例如切换Status
和Test Case ID
)直到你找到一个适合你需要的那个。