问题是RowCount在过滤后返回1而不是可见的行。RowCount = Cells(Rows.Count, colIndex).End(xlUp).SpecialCells(xlCellTypeVisible).Row
Sub showEightmonth(ws, colName, colIndex)
Dim RowCount As Integer
ws.Activate
MsgBox ws.Name
RowCount = Cells(Rows.Count, colIndex).End(xlUp).Row
Set Rng = Range(colName & "1:" & colName & RowCount)
If ws.AutoFilterMode = True Then
ws.AutoFilter.ShowAllData
End If
Rng.Select
Rng.NumberFormat = "mm/dd/yyyy hh:mm:ss"
d = Format(DateAdd("m", -8, Date), "mm/dd/yyyy 07:00:00")
Range(colName & "1").AutoFilter Field:=colIndex, Criteria1:="<" & d
RowCount = Cells(Rows.Count, colIndex).End(xlUp).SpecialCells(xlCellTypeVisible).Row
'Delete filtered row if RowCount > 1, as row 1 is the header row
If RowCount > 1 Then
delRow = colName & "2:" & colName & RowCount
ActiveSheet.Range(delRow).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
If ws.AutoFilterMode = True Then
ws.AutoFilter.ShowAllData
End If
End Sub
2条答案
按热度按时间xfb7svmp1#
您可以使用此函数并将过滤后的范围作为参数传递。
xqnpmsa82#
要计算应用过滤器后可见的行,您必须这样做:
出于演示目的,上面的代码打印了即时窗口中可见的行数。
请记住:
是仅由一个单元格组成的范围。相反,您需要的是一个区域,该区域由属于应用过滤器后仍然可见的行的所有单元格组成。
还要记住,当你使用包含行或列索引的变量时,它们应该被声明为
Long
。