Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Tabelle per VBA mit mehreren Autofiltern filtern
#1
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!
.xlsm   Tabelle_Mehrere_Autofilter_Dropdowns_VBA_01.xlsm (Größe: 63,28 KB / Downloads: 3)
Antwortento top
#2
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
Schöne Grüße
Berni
Antwortento top
#3
Danke für die extrem schnelle Antwort! Ich probier's gleich aus.
Antwortento top
#4
Hi Bernie,
läuft alles wie gewünscht. Danke noch mal!
Grüße
Martin
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste