从过滤范围中选择特定行/单元格的 VBA 问题

问题描述 投票:0回答:1

在对其中一个选项卡中的数据应用过滤器后,我在选择特定单元格时遇到问题。基本上,在“问题”选项卡中我有一些数据集。首先,我需要应用三个不同的过滤器(通过“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?
excel vba autofilter
1个回答
0
投票

正如罗恩现在删除的答案中所概述的那样......

如果你运行

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
© www.soinside.com 2019 - 2024. All rights reserved.