Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1684to1688
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabelle (listobject) leeren Filter per VBA prüfen

Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 13:23:32
M.
Hallo zusammen,
normalerweise lese ich bei einem Problem nur im Forum und muss nicht selbst schreiben. Aber diesmal komme ich nicht weiter und alles Lesen hat nichts gebracht.
Folgendes Problem:
Auf einem Tabellenblatt habe ich eine Tabelle (listobject). Per VBA selektiere ich einen bestimmten Wert und lösche die Zeile. So weit so gut. Wenn der Wert aber nicht vorhanden ist läuft VBA in einen Fehler: "Keine Zellen gefunden". Diesen Fehler will ich jetzt vorher abfangen. Bis jetzt ist mir nur dieser Workaround eingefallen:
If WorksheetFunction.CountIf(rg, "338000") > 0 Then 'Wert ist vorhanden. Löschen kann durchgeführt werden.
Ich frage mich, ob es nicht irgendeine Eigenschaft von listobject gibt, die zeigt, ob der Tabellenfilter Zeilen zeigt oder nicht. Ich habe schon alles mögliche mit Rows.count und Ähnlichem probiert. Wenn Zeilen vorhanden sind, dann funktionieren alle meine Versuche gut. Die Anzahl der Zeilen wird ausgegeben. Aber der Wert 0 (Null) wird nie ausgegeben. Alle meine Versuche laufen immer in die selbe Fehlermeldung.
Vielleicht hat ja jemand eine Idee.
Beste Grüße
Michael

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 13:34:03
Daniel
Hi
wenn rg der Bereich deiner Tabelle incl Überschrift ist und du wissen willst, ob Zeilen gefunden wurden oder ob alle ausgeblendet wurden, kannst du so abfragen:

if rg.Columns(1).SpecialCells(celltypevisible).Cells.count > 1 Then

das Problem ist, dass in diskontinuierlichen Zellbereichen, wie sie beim Filtern entstehen, ein Rows.count nicht funktioniert, sondern nur das Cells.Count.
Daher die Einschränkung auf eine Spalten, denn dann ist Zellenanzahl = Zeilenanzahl.
das zweite Problem ist, dass das SpecialCells einen fehlerabbruch ergibt, wenn keine Zellen gefunden werden können.
Daher ist es sinnvoll, hier für die Prüfung die Überschriftenzeile, welche ja immer sichtbar ist, mit zu verwenden, damit es keinen Fehler gibt.
Gruß Daniel
Anzeige
AW: Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 13:50:00
M.
Hallo Daniel,
danke für die schnelle Antwort. Ich muss dich aber leider enttäuschen, deine Antwort funktioniert nicht. Das hatte ich vorher auch schon ausprobiert. Ich habe jetzt noch den vorher stehenden Code hinzugefügt. Deine Zeile liefert bei mir bei einem Treffer nur den Wert 1 (nicht 2). Entsprechend muss ich die Zeile auf > 0 (>=1 funktioniert auch nicht) umstellen, damit es geht. Ist Criteria1 aber nicht vorhanden, dann läuft der Code wieder in den bekannten Fehler.
With wsBKM.ListObjects("BKM_Einlesung")
.Range.AutoFilter Field:=1, Criteria1:="338000"   'Zeile mit Gewerk "338000" suchen
Set rg = Range("BKM_Einlesung")
If rg.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 0 Then
Grüße Michael
Anzeige
AW: Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 14:14:17
Daniel
Hi
ich hatte dich extra darauf hingewiesen, dass der Zellbereich die Überschriftenzeile mit enthalten muss und dir auch noch erklärt, warum.
Wenn du deinen Zellbereich Range("BKM_Einlesung") überprüfst (z.B. im Namenseditor) wirst du feststellen, dass dieser nur auf den Datenbereich der jeweiligen Tabelle referenziert, aber die Überschriften nicht enthält.
Somit ist auch klar, warum DEINE Umsetzung meiner Antwort nicht funktioniert.
du solltest hier nicht über einen Namen gehen, sondern besser über den Zellbereich, den du schon für den Autofilter verwendet hast (denn dieser muss ja auch die Überschriftenzeile enthalten), hierbei kannst du ja auf die WITH-Klammer zurückgreifen.
(das hätte auch den Vorteil, dass du weniger Änderungen in deinem Code vornehmen musst, wenn du mal den Namen der Tabelle änderst):
if .Range.Columns(1).SpecialCells(xlcelltypevisible).Cells.Count > 1 then
Gruß Daniel
Anzeige
AW: Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 14:17:43
Luschi
Hallo M. Gilbert,
ich teste das immer so:

Dim rgF As Range
With ActiveSheet.ListObjects("Liste_01")
.Range.AutoFilter Field:=1, Criteria1:="ff"
On Error Resume Next
Set rgF = .DataBodyRange.SpecialCells(xlVisible)
On Error GoTo 0
If Not rgF Is Nothing Then
Debug.Print .DataBodyRange.SpecialCells(xlVisible).Address
Else
Debug.Print "Es gibt keine gefilterten Daten!"
End If
End With
Gruß von Luschi
aus klein-Paris
AW: Tabelle (listobject) leeren Filter per VBA prüfen
02.04.2019 17:37:13
M.
Hallo Daniel,
hallo Luschi,
vielen Dank für die Antworten. Dieses Forum ist echt klasse.
Mir ist noch nie aufgefallen, dass ich beim Aufruf eines Tabellenbereichs über den Namen nie die Überschriften mit dabei habe.
Grüße und nochmal vielen Dank
Michael
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige