高级过滤后动态选择可见行

时间:2017-03-22 10:09:19

标签: excel vba excel-vba filter

我有一个代码,首先通过高级过滤,过滤表格。在此之后,我想要选择除表头之外的表中的所有行并删除它。在我的表中,我有20列数据,有些行在前10列有数据,第11列和第20列有空单元,所以我真的不能使用selection.end(xldown,xlright).select等因为som行有空单元格。

我无法理解如何解决这个问题。您是否有专业人士对此有任何提示?

Sub notWanted()

Range("TabellInDataPivot[[#All],[Projekt]]").AdvancedFilter Action:= _
    xlFilterInPlace, CriteriaRange:=Sheets("Groupfiles").Range("C8:E9"),   Unique _
    :=False

    lastrow = ThisWorkbook.Worksheets("GruppData").Range("A" & Rows.Count).End(xlUp).Row
     .Range(.Cells(4, 3).Offset(rowoffset:=1), .Cells(lastrow, 20)).SpecialCells(xlCellTypeVisible).Select

     Selection.EntireRow.Delete
     ActiveSheet.ShowAllData
End Sub

我在代码行中得到了无效或不合格的引用错误.Range **(。Cells **(4,3)Altough这在早期的过滤和删除段中工作正常。

提前致谢 / d

2 个答案:

答案 0 :(得分:0)

Excel似乎不允许您删除已过滤表格中的行。在这种情况下,我认为您只需要使用宏进行过滤,然后选择所有可见行并单击确定on the prompt。很高兴听到是否有人找到了VBAish方式。

答案 1 :(得分:0)

我想我明白了!

我的代码结果如下,

Sub notWanted()


With ThisWorkbook.Worksheets("GD")

Range("TabellInDataPivot[[#All],[Projekt]]").AdvancedFilter Action:= _
    xlFilterInPlace, CriteriaRange:=Sheets("Groupfiles").Range("C8:E9"), Unique _
    :=False

    lastrow0 = .Range("F" & Rows.Count).End(xlUp).Row

Range("D2", Cells(Rows.Count, "D").End(xlUp)).SpecialCells(xlCellTypeVisible).Cells(2, 52).Select
.Range(Cells(3, 1), Cells(lastrow0, 55)).Rows.EntireRow.Select
Selection.EntireRow.Delete
ActiveSheet.ShowAllData
End With
End Sub

我添加了一个lastrow声明,然后是wholerow.delete。它似乎工作,所以我希望它会做它的事情!