我想做的事情相对简单。我有一个根据条件过滤的数据集,因此隐藏了工作表中的某些行。我为过滤后的数据设置了一个范围,该范围仅应通过示例代码可见的单元格进行。
With MyDataWorksheet.AutoFilter.Range
On Error Resume Next
Set AutoFilterRange = .SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
现在,我想遍历AutoFilterRange变量中的所有数据,该变量应该已经捕获了所有可见行。我让他们做这样的事情。
Sub aSub()
Dim DR As Range
For Each DR In AutoFilterRange
'Do something here
Next DR
End Sub
我在每个循环中都使用它来处理可见行,但是我想跳过数据范围中的第一个元素,因为该元素行号包含我的标题名称。我以为这样做会帮助解决我的问题,但是它所做的只是转到标题行元素之后的下一个隐藏行元素。
For Each DR In AutoFilterRange.Offset(1,0)
'Do something here
Next DR
答案 0 :(得分:2)
类似这样的东西
With MyDataWorksheet
If .AutoFilterMode Then
With .AutoFilter.Range
Set AutoFilterRange = .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible)
End With
End If
End With
在您的代码中,如果AutoFilter未打开,则不会显示AutoFilterRange,所以我也跳过了这一部分。
答案 1 :(得分:1)
您可以添加一个if语句和一个“标志”。
Sub aSub()
Dim DR As Range
Dim flag as Boolean
flag = false
For Each DR In AutoFilterRange
If flag = true Then
'Do something here
End If
flag = true
Next DR
End Sub
由于标志为false,这将跳过第一次迭代,然后将其设置为true,它将在所有其他迭代中do something
。
答案 2 :(得分:0)
您可以更改范围以不使用第一行:
Set AutoFilterRange = Range(Range("A2"), Range("A2").End(xlDown)).Cells