自动filter工作不正常

我试图根据列中的值过滤出一些单元格,但是我担心第一个filter操作会污染其余的,尽pipe我试图通过将filtermode设置为false来取消设置filter。

我的select方法如下所示:

Function GetRowRange(sheetRange, column, value) As Range 'check for a valid section column sheetRange.AutoFilterMode = False sheetRange.UsedRange.AutoFilter Field:=column, Criteria1:=value Set GetRowRange = sheetRange.UsedRange.SpecialCells(xlCellTypeVisible) MsgBox ("col:" & column & " val: " & value & " rows:" & GetRowRange.Rows.Count) sheetRange.AutoFilterMode = False End Function 

从msgbox我可以看到,只有第一个返回任何行

这是一个相当讨厌的问题! 🙂

问题是,在应用Autofilter和.SpecialCells(xlCellTypeVisible) ,新的Range对象由多个组合范围组成。

例如,当为B过滤此表时, 在这里输入图像说明

你的范围对象将有3个区域,每个1×2单元格。 出于某种奇怪的原因, Rows.Count并没有考虑这些区域,所以Selection.Rows.Count是1,尽pipe它应该是3.但是,如果循环遍历行枚举,它将按预期工作:

 lngCount = 0 For Each r In Selection.Rows lngCount = lngCount + 1 Next 

这将返回3。

所以你的GetRowRange将返回正确的范围,但是.Rows.Count例程将会提供错误的结果。 改用这个函数:

 Function RowCount(rngAreas As Range) As Long Dim lngCount As Long Dim rng As Range For Each rng In rngAreas.Areas lngCount = lngCount + rng.Rows.Count Next RowCount = lngCount End Function 

只是一个侧面说明:请注意,您的GetRowRange也将始终返回您的表的第一个标题行,所以相应地处理!