2017-04-07 3 views
1

Ich bin neu bei der Verwendung von VBA und ich habe Schwierigkeiten, einen VBA-Code zu erstellen, der alle Zellen löschen würde, die herausgefiltert wurden, ohne die Header zu löschen.So löschen Sie alle Zellen, die ohne Header mit VBA gefiltert wurden?

Der Code, den ich habe, ist unten, aber das funktioniert nicht, wenn sich die Anzahl der Zeilen ändert.

Range("A6").Select 
Range(Selection, Selection. End(xlToRight)).Select 
Selection.AutoFilter 
ActiveSheet.Range("$A$6:$AB$500").AutoFilter Field:=28, Criteria1:="0" 
Rows("221:221").Select 
Range("O221").Activate 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Delete Shift:=xlUp 
ActiveSheet.ShowAllData 

Antwort

0

Ein Weg ...

ActiveSheet.Range("$A$7:$AB$500").SpecialCells(xlCellTypeVisible).EntireRow.Delete 
0

Sie haben SpecialCells(xlCellTypeVisible) Methode zu verwenden, von Range Objekt

aber zuerst müssen Sie überprüfen, ob jede Zelle

hier ein gefiltert wurde Verwendung davon zusammen mit einem kleinen Refactor Ihres Codes:

With Range("AB6", Cells(Rows.Count, 1).End(xlUp)) '<--| reference columns A:AB cells from row 6 (header) down to column A last not empty row 
    .AutoFilter Field:=28, Criteria1:="0" '<--| filter referenced range on its 28th column (i.e.: "AB") with "0" 
    If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '<--| if any filtered cells other than headers then delete them (skipping headers) 
    .Parent.autofltermode = False 
End With 
+0

Aus bestimmten Gründen gibt es einen Fehler auf der Ebene .Resize (.Rows.Count - 1) .Offset (1) .SpecialCells (xlCellTypeVisible) .EntireRow.Delete – Nathalie

Verwandte Themen