Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob nach einer Spalte gefiltert

Prüfen ob nach einer Spalte gefiltert
31.08.2022 19:37:32
Newcomer
Hallo zusammen,
habe im Forum schon einiges gefunden, leider scheitere ich gerade an der Umsetzung einer Lösung, welche für ein "normales Excelblatt" bereits unter
https://www.herber.de/forum/archiv/1228to1232/1228598_Pruefen_ob_nach_einer_Spalte_gefiltert_wurde.html
von Josef Ehrensberger 2011 veröffentlicht wurde.
Ich habe eine intelligente Tabelle auf Worksheet mit Tabellennamen "Termine ASI", in der eine intelligente Tabelle mit Bezeichnung "ASI Termin Matrix" enthalten ist. Über den Header der intelligenten Tabelle lasse ich eine Schleife über alle Spalten laufen. Mit dem Befehl
If Not (Range("Header_Filter_Show").Cells(i).value) Then _
Worksheets("Termine ASI").Range("ASI_Termin_Matrix[#Headers]").AutoFilter _
Field:=i, _
VisibleDropDown:=False
blende ich in manchen Spalten die Filtersymbole aus. Definiert, ob ausblenden oder nicht, ist im Range("Header_Filter_Show") hinterlegt.
Jetzt versuche ich verzweifelt, dieselbe Lösung von oben aber für eine "intelligente Tabelle" umzuschreiben. Scheitere kläglich.
Hoffe, es kann mir jemand weiterhelfen.
Gruß von Newcomer
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob nach einer Spalte gefiltert
01.09.2022 07:21:31
Oberschlumpf
Moin,
zeig doch bitte mal per Upload eine Excel-Bsp-Datei mit Bsp-Daten und teilweise ausgeblendeten Filtersymbolen und mit deinem Code.
Ciao
Thorsten
AW: Prüfen ob nach einer Spalte gefiltert
01.09.2022 08:49:37
Newcomer
Hallo zusammen, hallo Thorsten,
unter dem Link
https://www.herber.de/bbs/user/154915.xlsm
habe ich meine Datei hochgeladen. In Spalte F gibt es 2 Symbole mit Makro. Erläuterungen, wenn man mit der Maus in den orangen Rahmen fährt.
Die Filtersymbole lassen sich natürlich ein Tabellentools\Entwurf\"Schaltfläche Filter" jederzeit wieder einblenden.
In https://www.herber.de/forum/archiv/1228to1232/1228598_Pruefen_ob_nach_einer_Spalte_gefiltert_wurde.html
lautet die Abfrage
For Each objFilter In .AutoFilter.Filters
If objFilter.On Then ....
und das Pendant für die Abfrage suche ich für die intelligente Tabelle.
Gruß von Newcomer
Anzeige
sorry, weiß leider auch keine Lösung
01.09.2022 09:16:17
Oberschlumpf
Hi,
danke für die Bsp-Datei - aber helfen kann ich nicht - liegt nicht an der Datei, sondern an meiner Unwissenheit :-)
Bin sicher, wer anders wird bestimmt helfen können!
Ciao
Thorsten
ShowAutoFilter = True
01.09.2022 10:52:29
Yal
Hallo New (man spricht sich hier mit Vorname an ;-)
Du musst zuerst das ListObject-Eigenschaft ShowAutoFilter einschalten. Dann kannst Du auf die gewünschte Information zugreifen:

Sub checkFilter()
Dim F As Filter
Dim msg As String
Dim i
With ThisWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1")
.ShowAutoFilter = True
For Each F In .AutoFilter.Filters
i = i + 1
If F.On Then msg = msg & vbCr & "Feld " & i & """" & .HeaderRowRange.Cells(i) & """: " & F.Criteria1
Next
End With
If msg  "" Then MsgBox "Gefiltert auf: " & vbCr & msg
End Sub
VG
Yal
Anzeige
AW: ShowAutoFilter = True
02.09.2022 10:52:45
Newcomer
Hallo zusammen,
Super schnell die Schwarmintelligenz!
@Thorsten - danke trotzdem für deine Mühe
@ Yal - danke.
Ist was ich benötige. Wäre selbst nie drauf gekommen.
Eine Anmerkung noch: Mit der Anweisung
msg=msg & xxxx & F.Criteria1
für die Generierung der Ergebnisausgabe kommt bei mir Laufzeitfehler '13': Typen unverträglich, wenn mehr als drei Filterkriterien gesetzt wurden. Da es ich aber nicht benötige, ist es die Lösung für mich.
VG New -;)
Anzeige
Noch offen? Eher versehen, oder. owT
03.09.2022 22:00:15
Yal
;
Anzeige
Anzeige

Infobox / Tutorial

Prüfen, ob in einer Terminmatrix nach einer Spalte gefiltert wurde


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei, in der sich die intelligente Tabelle mit der Bezeichnung "ASI Termin Matrix" befindet.

  2. Aktiviere den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  4. Füge den folgenden VBA-Code ein:

    Sub checkFilter()
       Dim F As Filter
       Dim msg As String
       Dim i As Integer
       With ThisWorkbook.Worksheets("Termine ASI").ListObjects("ASI_Termin_Matrix")
           .ShowAutoFilter = True
           For Each F In .AutoFilter.Filters
               i = i + 1
               If F.On Then msg = msg & vbCr & "Feld " & i & """" & .HeaderRowRange.Cells(i) & """: " & F.Criteria1
           Next
       End With
       If msg <> "" Then MsgBox "Gefiltert auf: " & vbCr & msg
    End Sub
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zur Excel-Datei.
    • Drücke ALT + F8, wähle checkFilter und klicke auf Ausführen.

Dieser Code prüft, ob in der intelligenten Tabelle gefiltert wurde und zeigt die aktiven Filterkriterien an.


Häufige Fehler und Lösungen

  • Laufzeitfehler '13': Typen unverträglich:

    • Dieser Fehler kann auftreten, wenn mehr als drei Filterkriterien gesetzt wurden. Überprüfe die Anzahl der aktiven Filter und passe die Logik deines Codes an, um diesen Fehler zu vermeiden.
  • Das Filtersymbol wird nicht angezeigt:

    • Stelle sicher, dass die Eigenschaft .ShowAutoFilter auf True gesetzt ist, bevor du die Filter abfragst.

Alternative Methoden

Falls du nicht mit VBA arbeiten möchtest, kannst du auch die Excel-Funktion FILTER verwenden, die in Excel 365 und Excel 2021 verfügbar ist. Diese Funktion ermöglicht es dir, Daten basierend auf bestimmten Kriterien zu filtern, ohne VBA zu verwenden.

Beispiel:

=FILTER(A2:C10, C2:C10="Kriterium")

Praktische Beispiele

  • Beispiel für eine Terminmatrix: Angenommen, du hast eine Tabelle mit Terminen, die nach Status gefiltert werden soll. Verwende das oben genannte Makro, um festzustellen, ob nach dem Status gefiltert wurde und um die entsprechenden Filterkriterien anzuzeigen.

Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang deiner Module Option Explicit ein, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.

  • Code effizienter gestalten: Anstatt die Filter manuell abzufragen, kannst du auch eine Funktion erstellen, die alle aktiven Filter in einer Array-Variable speichert. So kannst du einfacher darauf zugreifen.


FAQ: Häufige Fragen

1. Kann ich die Filtereinstellungen auch für andere Tabellen verwenden? Ja, du musst lediglich den Tabellennamen und den Worksheet-Namen im VBA-Code anpassen.

2. Was mache ich, wenn ich keine intelligenten Tabellen verwenden kann? Du kannst den Code so anpassen, dass er für normale Bereiche funktioniert. Ersetze .ListObjects("ASI_Termin_Matrix") durch den Zellbereich, den du filtern möchtest.

3. Ist dieser Ansatz in allen Excel-Versionen verfügbar? Der VBA-Code funktioniert in den meisten Excel-Versionen, die Makros unterstützen. Neuere Funktionen wie FILTER sind jedoch nur in Excel 365 und Excel 2021 verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige