Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

gefilterte Zeilen nicht zu löschen

gefilterte Zeilen nicht zu löschen
31.03.2021 12:32:39
Georg
Hallo zusammen,
bei mir klemmt es gerade wieder und in der Recherche hab ich da nichts gefunden. Obwohl mir das Problem eigentlich banal erscheint. Hab ich es übersehen? :- (
Ich setze in einer Tabelle (nicht Liste) einen Filter und will die dann gezeigten Zeilen löschen. Das habe ich erst per Rekorder aufgezeichnet:
Sub Makro8()
ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=16, Criteria1:="44256"
Range("TabData[DealPivot'[SnapShot Date']]").SpecialCells(xlCellTypeVisible).EntireRow. _
Delete
End Sub

Beim Wiederholen filtert er auch erst lieb die Tabelle, aber beim Löschen bekomme ich die Fehlermeldung:
"Laufzeitfehler 1004: Die delete-Methode des Range Objektes konnte nicht ausgeführt werden".
Wo ich es doch vorher genau so gemacht habe. ?!?!?!
DANKE für eure Hilfe!
Gruß Georg

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
PS:
31.03.2021 13:23:52
Georg
einen hab ich noch..
Ich hab es auch mal mit einer Do Until Schleife versucht, was so auch funktioniert, aber durch die Anzahl der Zeilen (20.000) endlos lang gedauert hat. (Interessanterweise klappt es hierbei mit dem Datumsformat (s.u.) und 44256 ist nicht nötig).
Sub test()
Do Until Range("P16").Offset(vROW, 0).Value = ""
If Range("P16").Offset(vROW, 0).Value  "01.03.2021" Then
Range("P16").Offset(vROW, 0).EntireRow.Delete
vROW = vROW - 1
End If
vROW = vROW + 1
Loop
End Sub

Das aber nur so als Zusatzinfo "Was bisher geschah..."

Anzeige
AW: gefilterte Zeilen nicht zu löschen
31.03.2021 13:29:55
ChrisL
Hi Georg
Die Anführungszeichen scheinen mir etwas komisch und DealPivot kann ich nicht einordnen.
TabData[DealPivot'[SnapShot Date']]
Jedenfalls kommt der Fehler, wenn es keine sichtbaren Zellen (Visible) mehr gibt. Wenn du es nicht mit einem schmutzigen On Error Resume Next abfangen willst, dann z.B. so...
Sub Makro8()
With ActiveSheet
.ListObjects("TabData").Range.AutoFilter Field:=16, Criteria1:="44256"
If WorksheetFunction.CountIf(.Range("TabData[SnapShot Date]"), "" & 44256) Then _
.Range("TabData[SnapShot Date]").SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub
cu
Chris

Anzeige
danke, aber :-(
31.03.2021 13:43:00
Georg
Hallo Chris,
vielen Dank, aber - nee, die Fehlermeldung bleibt leider. Er weigert sich, die visible Zeilen zu löschen.
Die komische Bezeichnung mit "DealPivot" und den Anführungszeichen ist schon ok so. Das "DealPivot" ist im Spaltennamen und die ' setzt der Rekorder.
Ich schau mal, ob ich es mit einer reduzierten Form nachbilden und hochladen kann. Falls aber vorher schon jemand weitere Ideen hat - gerne.. :-)=)
So sieht der Code jetzt aus:
Sub Makro9()
With ActiveSheet
.ListObjects("TabData").Range.AutoFilter Field:=16, Criteria1:="44256"
If WorksheetFunction.CountIf(.Range("TabData[DealPivot'[SnapShot Date']]"), "" & 44256)  _
Then _
.Range("TabData[DealPivot'[SnapShot Date']]").SpecialCells(xlCellTypeVisible).EntireRow. _
Delete
End With
End Sub


Anzeige
AW: danke, aber :-(
31.03.2021 13:48:33
ChrisL
Hi
Ja bitte Beispieldatei. (gerne als xlsx ohne Makro, sonst kann ich nicht downloaden)
Wenn der Spaltenname DealPivot ist, was ist dann SnapShot Date
cu
Chris

Datei ohne Makros
31.03.2021 14:06:29
Georg
Aaalso, hier die Datei ohne Makros. Ist natürlich so eine Sache, wenn man Makros testen will...
Aber die kann man ja auch hier posten. :-)
Die Spaltennamen sind halt leider einmal so...
Danke für`s knobeln!
Gruß Georg
https://www.herber.de/bbs/user/145226.xlsx

AW: Datei ohne Makros
31.03.2021 14:55:36
ChrisL
Hi
Sub Makro8()
With Tabelle7
.ListObjects("TabData").Range.AutoFilter Field:=16, Criteria1:="44256"
If WorksheetFunction.CountIf(.Range("TabData[DealPivot'[SnapShot Date']]"), "" & 44256) Then
Application.DisplayAlerts = False
.ListObjects("TabData").DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
End If
End With
End Sub
Quelle/Inspiration: https://stackoverflow.com/questions/54450374/vba-deleting-visible-rows-of-a-table-run-time-error-1004-delete-method-of
cu
Chris

Anzeige
Wie geil ist das denn!!
31.03.2021 15:19:15
Georg
Gackergacker - einfach die Alerts wegschalten und schon klappt es! Suuper, vielen Dank!!
Ich hatte zwischenzeitig mal damit rumprobiert, die Zeilen vor dem Löschen zu Sortieren. Schein auch zu gehen, hab es aber noch nicht abschließend geprüft... Deins ist aber besser. Klasse, vielen Dank!

hat aber leider nicht geklappt
31.03.2021 14:11:33
Georg
Hallo Ralf,
danke für den Link. Das geht aber leider auch nicht. Ich hab es hier mal in einer Datei (mit Makro) eingebaut.
https://www.herber.de/bbs/user/145227.xlsb
Fällt Dir was ein?
Danke und Gruß Georg

Anzeige
AW: hat aber leider nicht geklappt
31.03.2021 15:15:37
Werner
Hallo,
teste mal:
  • 
    Sub Filtern_Löschen()
    Application.ScreenUpdating = False
    With Worksheets("Daten")
    .ListObjects("TabData").Range.AutoFilter Field:=16, Criteria1:="44256"
    With .ListObjects("TabData").AutoFilter.Range
    If .Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
    Application.DisplayAlerts = False
    .Offset(1).Resize(.Rows.Count - 1).Delete
    Else
    MsgBox "Es gibt kein Filterergebnis."
    End If
    End With
    .ListObjects("TabData").AutoFilter.ShowAllData
    End With
    End Sub
    

  • Gruß Werner

    aber jetzt!
    31.03.2021 15:22:39
    Georg
    Hallo Werner,
    danke, das hatte Chris auch eben als Idee gehabt - ganz klasse. Einfach die Meldung abwürgen und gut ist...
    Da muss man erstmal drauf kommen! :-)=)
    Gruß Georg

    Anzeige
    Nein, da wird nichts abgewürgt....
    01.04.2021 19:08:13
    Werner
    Hallo,
    ...da bist du jetzt aber vollkommen schief gewickelt. Das hat jetzt aber überhaupt nichts damit zu tun, dass "deine Fehlermeldung" abgewürgt wird.
    Es werden lediglich die "Bildschirm Meldungen" abgeschaltet. Mach beim Code von Chris oder von mir die Zeile mal raus und lass den Code laufen. Da kommt eine Rückfrage von Excel, ob die komplette Zeile gelöscht werden soll.
    Das hat aber überhaupt nichts mit einer Fehlermeldung des VBA-Interpreters zu tun. Wenn das so wäre, dann müsste ja dein ursprünglicher Code laufen, wenn du die Zeile dort einfügen würdest.
    Tut es aber nicht, weil Bildschirm Meldungen nichts mit Fehlern im VBA-Code zu tun haben.
    Gruß Werner

    Anzeige
    Oooookay ..!!
    02.04.2021 19:57:22
    Georg
    Danke für die Klärung, Werner! Ich werd es nach Ostern mal mit auskommentierter Zeile probieren.
    Jetzt aber erstmal: Frohe Ostern!
    Bleibt alles gesund und behaltet die Nerven!
    Georg

    320 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige