我正在使用下面的代码来获取VBA中已过滤数据行的计数,但在获取计数时,它会显示运行时错误:
"所需对象".
有些人可以告诉我需要哪些更改?
Set rnData = .UsedRange
With rnData
.AutoFilter Field:=327, Criteria1:=Mid(provarr(q), 1, 2)
.Select
.AutoFilter Field:=328, Criteria1:=Mid(provarr(q), 3, 7)
.Select
.AutoFilter Field:=330, Criteria1:=Mid(provarr(q), 10, 2)
.Select
.AutoFilter Field:=331, Criteria1:=Mid(provarr(q), 12, 2)
.Select
Rowz = .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows.count
....
End With
Run Code Online (Sandbox Code Playgroud) 背景:
我已经申请了很多次AutoFilter,但从未真正问过自己为什么有时会如此运作。有时,处理过滤后的数据的结果可能会造成混乱,尤其是在SpecialCells发挥作用时。
让我详细说明以下情形:
测试数据:
| Header1 | Header2 |
|---------|---------|
| 50 | |
| 10 | |
| 30 | |
| 40 | |
| 20 | |
Run Code Online (Sandbox Code Playgroud)
代码1-普通AutoFilter:
With Sheets("Sheet1").Range("A1:B6")
.AutoFilter 1, ">50"
.Columns(2).Value = "Check"
.AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)
这将起作用(即使不使用SpecialCells(12)),但也会填充B1。
代码2-使用.Offset:
为了防止上述行为,我们可以这样实现Offset:
With Sheets("Sheet1").Range("A1:B6")
.AutoFilter 1, ">50"
.Columns(2).Offset(1).Value = "Check"
.AutoFilter
End With
Run Code Online (Sandbox Code Playgroud)
但是,这现在将填充我们的数据cell下方的行B7。
代码3-使用.Resize:
为了防止.Offset填充,B7 …