01.05.2025, 13:37
Hallo zusammen,
ich suche eine Möglichkeit, innerhalb einer Tabelle bei einem gesetzten Filter zu prüfen, ob in der Spalte nach Datum gefiltert ist. Nachfolgenden Code habe ich schon, aber bei Datumsfiltern bleibt das Filterkriterium "Crit1" immer leer. Wie muss der Code aussehen, um festzustellen, dass entweder nach einem Datum gefiltert wurde oder nach mehreren (Array?)? Die entscheidende Stelle ist nach dem Kommentar " ### Hier prüfen, ob nach Datum gefiltert ist ###":
Anbei die Datei einmal als .xlsm, einmal als .xlsx.
IT.xlsm (Größe: 29 KB / Downloads: 6)
IT.xlsx (Größe: 15,69 KB / Downloads: 5)
Danke für's Lesen.
ich suche eine Möglichkeit, innerhalb einer Tabelle bei einem gesetzten Filter zu prüfen, ob in der Spalte nach Datum gefiltert ist. Nachfolgenden Code habe ich schon, aber bei Datumsfiltern bleibt das Filterkriterium "Crit1" immer leer. Wie muss der Code aussehen, um festzustellen, dass entweder nach einem Datum gefiltert wurde oder nach mehreren (Array?)? Die entscheidende Stelle ist nach dem Kommentar " ### Hier prüfen, ob nach Datum gefiltert ist ###":
Code:
Option Explicit
Sub FilterDerAktivenSpaltePruefen()
Dim MyLO As ListObject
Dim AF As AutoFilter
Dim Spalte As Long
Dim WSh As Worksheet
Dim Crit1 As Variant, Crit2 As Variant
Dim Op As XlAutoFilterOperator
Dim i As Long
Dim Result As String
Set WSh = ThisWorkbook.Sheets("Test")
Set MyLO = WSh.ListObjects("MyTab")
' Prüfen, ob ActiveCell innerhalb der Tabelle liegt
If Intersect(ActiveCell, MyLO.DataBodyRange) Is Nothing Then
MsgBox "Die aktive Zelle liegt nicht innerhalb der Tabelle."
Exit Sub
End If
' Autofilter prüfen
If Not MyLO.ShowAutoFilter Then
MsgBox "Die Tabelle hat keinen Autofilter aktiviert."
Exit Sub
End If
' Sicherstellen, dass AutoFilter-Objekt existiert
On Error Resume Next
Set AF = MyLO.Range.Worksheet.AutoFilter
On Error GoTo 0
If AF Is Nothing Then
MsgBox "Noch nie ein Filter gesetzt – kein AutoFilter-Objekt vorhanden."
Exit Sub
End If
' Spalte innerhalb der Tabelle ermitteln
Spalte = ActiveCell.Column - MyLO.Range.Cells(1, 1).Column + 1
' Prüfen, ob in dieser Spalte ein Filter aktiv ist
If Spalte > AF.Filters.Count Then
MsgBox "Spalte liegt außerhalb der gefilterten Spalten."
Exit Sub
End If
If AF.Filters(Spalte).On Then
' Abfangen bei speziellen Typen wie Datum
' ### Hier prüfen, ob nach Datum gefiltert ist ###
On Error Resume Next
Crit1 = AF.Filters(Spalte).Criteria1
Op = AF.Filters(Spalte).Operator
Crit2 = AF.Filters(Spalte).Criteria2
On Error GoTo 0
' Auswertung
If IsArray(Crit1) Then
Result = "Mehrere Kriterien: "
For i = LBound(Crit1) To UBound(Crit1)
Result = Result & vbNewLine & "- " & Format(Crit1(i), "dd.mm.yy")
Next i
MsgBox Result
ElseIf Not IsMissing(Crit2) And Not IsEmpty(Crit2) Then
MsgBox "Kriterien: " & FormatKriterium(Crit1) & " " & IIf(Op = xlOr, "ODER", "UND") & " " & FormatKriterium(Crit2)
Else
MsgBox "Aktives Filterkriterium: " & FormatKriterium(Crit1)
End If
Else
MsgBox "In der aktiven Spalte ist kein Filter aktiv."
End If
End Sub
Private Function FormatKriterium(val As Variant) As String
If IsDate(val) Then
FormatKriterium = Format(val, "dd.mm.yy")
Else
FormatKriterium = CStr(val)
End If
End Function
Anbei die Datei einmal als .xlsm, einmal als .xlsx.


Danke für's Lesen.
Herzliche Grüße aus dem Rheinland
Jörg
[Windows 10, Microsoft 365]
Jörg
[Windows 10, Microsoft 365]