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

Forumthread: Autofilter über Combobox und VBA steuern

Autofilter über Combobox und VBA steuern
carlo
Hallo Zusammen,
Ich möchte eigentlich nur die Funktionalität des Autofilters 1:1 in VBA mit Comboboxen abbilden.
Folgende Situation:
Ich habe ein Tabellenblatt "Autos" mit den Spalten
Marke
Modell
Plätze
Getriebe
Kaufpreis
Effizienzklasse
Nun habe ich auf dem Tabelleblatt "Filter" 6 Comboboxen, welche ich mit den Daten des Autofilters vom Tabellenblatt "Autos" füllen möchte. Das heisst, wähle ich die Marke Opel, möchte ich, dass alle anderen Comboxen nur noch die gefilterte Auswahl anzeigen.
Dann sollte ich natürlich alles zurücksetzen können.
Zudem sollte es egal sein, welche Combobox ich zuerst wähle. Die anderen Comboboxen müssen dann automatisch aktualisiert werden. Eben halt gleich wie der Autofilter nur halt mit Comboboxen.
Gibt es hier einen einfachen Ansatz sozusagen Copy Autofilter Funktion?
Danke und Gruss
Carlo
Anzeige
AW: Autofilter über Combobox und VBA steuern
10.11.2010 16:01:49
carlo
Danke für die Antwort. Ich suche nach einer einfachen Lösung mit wenig Code und sehr effizient.
Ich möchte eigentlich die Daten, welche im Autofilter zur Auswahl stehen rausholen und diese dann in der Combobox anzeigen.
So etwas wie Autofilter.Value und diese dann in die Combobox kopieren oder die Daten im Autofilter direkt mit der Combobox verlinken, so dass diese immer aktuell sind.
Ich möchte nicht die Resultate, welche vom Autofilter angezeigt werden, sondern nur die Daten, dich ich zum Filtern in einer Spalte zur Auswahl habe, wenn ich auf den Pfeil neben Autofilter klicke.
Kann ich diese Daten irgendwie rausholen?
Gruss Carlo
Anzeige
AW: Autofilter über Combobox und VBA steuern
11.11.2010 09:41:15
bst
Morgen Carlo,
"Ich suche nach einer einfachen Lösung mit wenig Code und sehr effizient."
Die wirst Du M.E. nicht finden. M.E. musst Du dazu die Einträge der gefilterten Liste selber durchlaufen und daraus die Doppelten löschen, z.B. mit einem Dictionary-Objekt.
Siehe vielleicht auch: https://www.herber.de/forum/archiv/996to1000/t997259.htm
cu, Bernd
--
Option Explicit
Sub TestIt()
Tabelle2.ComboBox1.List = getAutoFilterList(1)
End Sub

Function getAutoFilterList(Optional ByVal intSpalte As Integer = 1) As Variant
Dim rngsrc As Range, rngCell As Range, objDic As Object
If ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode Then
Set rngsrc = ActiveSheet.AutoFilter.Range.Columns(intSpalte).SpecialCells( _
xlCellTypeVisible)
If rngsrc.Count > 1 Then
Set objDic = CreateObject("scripting.dictionary")
For Each rngCell In rngsrc
If rngCell.Address  rngsrc.Cells(1).Address Then objDic(rngCell.Value) = 0
Next
getAutoFilterList = objDic.Keys
objDic.RemoveAll
Set objDic = Nothing
End If
End If
End Function

Anzeige
AW: Autofilter über Combobox und VBA steuern
12.11.2010 17:46:06
carlo
Hallo Bernd,
Vielen Dank. Beide Varianten funktionieren einwandfrei.
Ich filtere nun die Datensätze über die Comboboxen. Ich habe nun 4 Comboboxen und möchte nun die Daten über diese Steuern. Das heisst ich kann irgendwo bei einer Combobox beginnen.
Ich hab nun gedacht, dass ich mit If-Bedingungen diese Filterung steuere. Zum Beispiel: Wenn Combobox1 = Kriterium und Combobox 2 = Kriterium, dann filtere ich mit diesen beiden Werten. Combobox3 und Combobox4 sind sozusagen false.
Wenn meine Mathematik-Kenntnisse mich nicht täuschen, gibt das 24 Varianten, welche ich mit If-Bedingungen abdecken muss. Das gibt einen sehr langen Code.
Gibt es hier auch eine kürzere Version oder muss man hier über die volle Distanz gehen? ;-)
Danke und Gruss Carlo
Anzeige
AW: Autofilter über Combobox und VBA steuern
15.11.2010 09:19:33
bst
Morgen Carlo,
ich habe nicht verstanden wie Du das meinst?
cu, Bernd
;
Anzeige
Anzeige

Infobox / Tutorial

Autofilter über Combobox und VBA steuern


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Daten: Stelle sicher, dass du ein Tabellenblatt mit dem Namen "Autos" hast, das die Spalten Marke, Modell, Plätze, Getriebe, Kaufpreis und Effizienzklasse enthält.

  2. Erstellen der Comboboxen: Füge auf einem anderen Tabellenblatt (z.B. "Filter") 6 Comboboxen hinzu, die als Filter für die Daten dienen.

  3. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  4. Code einfügen: Füge den folgenden Code in ein Modul ein:

    Sub TestIt()
        Tabelle2.ComboBox1.List = getAutoFilterList(1)
    End Sub
    
    Function getAutoFilterList(Optional ByVal intSpalte As Integer = 1) As Variant
        Dim rngsrc As Range, rngCell As Range, objDic As Object
        If ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode Then
            Set rngsrc = ActiveSheet.AutoFilter.Range.Columns(intSpalte).SpecialCells(xlCellTypeVisible)
            If rngsrc.Count > 1 Then
                Set objDic = CreateObject("scripting.dictionary")
                For Each rngCell In rngsrc
                    If rngCell.Address <> rngsrc.Cells(1).Address Then objDic(rngCell.Value) = 0
                Next
                getAutoFilterList = objDic.Keys
                objDic.RemoveAll
                Set objDic = Nothing
            End If
        End If
    End Function
  5. Comboboxen mit Werten füllen: Verwende die Funktion getAutoFilterList, um die Comboboxen dynamisch mit den gefilterten Werten zu füllen.

  6. Filterlogik implementieren: Füge Logik hinzu, um die Auswahl in den Comboboxen zu verknüpfen, sodass die Auswahl in einer Combobox die Optionen in den anderen beeinflusst.


Häufige Fehler und Lösungen

  • Fehler: Comboboxen zeigen keine Werte an
    Lösung: Überprüfe, ob der Autofilter aktiv ist (ActiveSheet.AutoFilterMode). Stelle sicher, dass die Spalte, die du filtern möchtest, korrekt angegeben ist.

  • Fehler: VBA gibt einen Laufzeitfehler aus
    Lösung: Achte darauf, dass alle Comboboxen korrekt benannt sind und dass du die richtige Tabelle ansprichst, z.B. Tabelle2.


Alternative Methoden

  • Verwendung von Datenüberprüfung: Du kannst auch die Datenüberprüfung in Excel nutzen, um Dropdown-Listen zu erstellen, die eine ähnliche Funktionalität bieten, jedoch ohne VBA.

  • Formeln zur Filterung: Nutze Formeln wie FILTER (ab Excel 365), um dynamisch Daten zu filtern, ohne VBA zu verwenden.


Praktische Beispiele

  1. Einfaches Beispiel: Verwende die Comboboxen, um die Marke auszuwählen. Wenn "Opel" gewählt wird, sollte die zweite Combobox nur die Modelle von Opel anzeigen.

  2. VBA-Filterung: Modifiziere den oben genannten Code, um mehrere Bedingungen zu berücksichtigen. Hierbei musst du sicherstellen, dass die Filterbedingungen dynamisch angepasst werden.


Tipps für Profis

  • Verwende Dictionaries: Der Einsatz von Dictionary-Objekten zum Verwalten von gefilterten Werten ist effizient und hilft, doppelte Einträge zu vermeiden.

  • Code optimieren: Halte deinen VBA-Code so kurz und prägnant wie möglich, um die Lesbarkeit und Wartbarkeit zu erhöhen.

  • Debugging: Nutze Debug.Print, um Zwischenergebnisse zu überwachen und den Code besser zu verstehen.


FAQ: Häufige Fragen

1. Wie kann ich alle Comboboxen zurücksetzen?
Du kannst eine Reset-Funktion erstellen, die alle Comboboxen auf ihren Ausgangswert zurücksetzt, indem du ComboBox1.Value = "" usw. verwendest.

2. Funktioniert das auch in Excel 2010?
Ja, die vorgestellten Methoden und der VBA-Code sind mit Excel 2010 und späteren Versionen kompatibel. Achte darauf, dass der Autofilter aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige