自动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
也将始终返回您的表的第一个标题行,所以相应地处理!