在对其中一个选项卡中的数据应用过滤器后,我在选择特定单元格时遇到问题。基本上,在“问题”选项卡中我有一些数据集。首先,我需要应用三个不同的过滤器(通过“AutoFilter”完成),然后(假设只剩下三行,分别是第 780、1716 和 4286 行)我想处理第一个可见行(除了第一行带标题)。
dim rowNumber as Long
rowNumber = issues.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible)(2).Row
它有效并给了我
rowNumber = 780
,这是正确的。
但是当我想选择第二个可见行并将偏移量更改为 2 时 - 没有任何变化。实际上它不会改变,除非我将偏移量设置为至少 780 的数字(然后它返回等于第二个可见行的数字)。
我想通过将可见范围复制到下一个选项卡来克服这个问题,在那里我只有三个连续的行(1、2 和 3,不包括标题),但我也无法复制范围。
dim filteredRange as Range
filteredRange = issues.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
filteredRange.copy destination:=sheet2.Range("A2")
不起作用,给我sheet2.Range("A2") = <Object variable or With block variable not set>
.
Do you know what might be the reason?
正如罗恩现在删除的答案中所概述的那样......
如果你运行
SpecialCells
你经常会得到一个多区域范围:你不能使用 filteredRange(row, column)
可靠地索引到那个范围,因为你的行/列总是应用于 第一个区域(并且可以扩展到那个区域之外区域)。 - 如果有两行(假设是 5 和 10),那么 filteredRange(2, 1).Row
将是 6 而不是 10.
Sub Tester()
Dim rng As Range, rw As Range
Set rng = Application.Union(Rows(5), Rows(10))
Debug.Print rng.Cells(1, 1).Row '5 - only works reliably for first cell
Debug.Print rng.Cells(2, 1).Row '6!
Debug.Print rng.Rows(2).Row '6!
'for each is a reliable way to loop over the range...
For Each rw In rng.Rows
Debug.Print rw.Row '5 and 10
Next rw
End Sub