Clever-Excel-Forum

Normale Version: Tabelle per VBA mit mehreren Autofiltern filtern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Excel-Experten,

ich bin Excel- und VBA-Anfänger mit so gut wie keinen Kenntnissen und möchte eine Tabelle mit VBA filtern.

Zuerst soll eine feste Spalte nach Kriterien gefiltert werden, die durch ein Dropdown-Menü vorgegeben sind. Das habe ich nach dem Durchforsten vieler Foren und Videoanleitungen hinbekommen.

Ein zweites Dropdown-Menü soll die Tabelle bzw. die durch das erste Dropdown-Menü herausgefilterten Zeilen erneut filtern. Hierbei wird aber durch das Dropdown-Menü die zu filternde Spalte bzw. deren Header vorgegeben, das Filterkriterium ist fest (enthält"yes").

Außerdem habe ich noch einen Button zum Zurücksetzen der Filter angelegt.

Solange ich statt dem zweiten Dropdown-Menü die zu filternde Spalte fest im Code vorgebe, funktioniert alles einwandfrei, sobald ich versuche, die zu filternde Spalte durch den im Dropdown erscheinenden Wert zu bestimmen, bekomme ich eine Fehlermeldung.

Kann mir hier jemand helfen?

Hier der bisherige Code:



Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)

If Target.Address = "$D$6" Then

Dim ws As Worksheet
Dim lst As ListObject
Dim iCol As Long
Dim iCol3 As Long
   

   Set ws = ThisWorkbook.Worksheets(1)
   Set lst = ws.ListObjects(1)
   
   iCol = lst.ListColumns("Product Function").Index

   lst.Range.AutoFilter Field:=iCol, Criteria1:=ws.Range("Drop_Down_Product_Function")

End If

If Target.Address = "$D$9" Then
   
   iCol2 = ws.Range("Drop_Down_Ecolabel")
   iCol3 = lst.ListColumns(iCol2).Index

   lst.Range.AutoFilter Field:=iCol3, Criteria1:="*yes*"
   
End If

End Sub

Ich hänge mal eine reduzierte Tabelle zum besseren Verständnis an, hier läuft der zweite Autofilter fest über die "Ecolabel"-Spalte und alles funktioniert, wie es soll. Ich würde nur gerne das Field in diesem Autofilter über das zweite Dropdown-Menü festlegen, bekomme dann aber die Fehlermeldung.

Vielen Dank für jeden auch noch so kleinen Hinweis![attachment=19580]
Hallo Martin,

dein Problem war, dass du den Fall, dass der Filter Ecolabel leer ist, nicht abgefangen hast. Deswegen hat Excel natürlich ein Problem, wenn D9 leer ist.
Ich hab mir erlaubt, deinen Code ein bisschen aufzuräumen.

Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim ws As Worksheet
Dim lst As ListObject
Dim iCol As Long
Dim Filter2 As String

Set ws = ThisWorkbook.Worksheets(1)
Set lst = ws.ListObjects(1)

If Target.Address = "$D$6" Then
   iCol = lst.ListColumns("Product Function").Index
   lst.Range.AutoFilter Field:=iCol, Criteria1:=ws.Range("Drop_Down_Product_Function")
End If


If Target.Address = "$D$9" Then
    Filter2 = ws.Range("D9").Value
        If Filter2 <> "" Then
            iCol3 = lst.ListColumns(Filter2).Index
            lst.Range.AutoFilter Field:=iCol3, Criteria1:="*yes*"
        End If
End If

End Sub
Danke für die extrem schnelle Antwort! Ich probier's gleich aus.
Hi Bernie,
läuft alles wie gewünscht. Danke noch mal!
Grüße
Martin