Wenn Sie ein Kombinationsfeld etwa zum Filtern von Artikeln nach einer bestimmten Kategorie verwenden, können Sie jeweils eine Gruppe von Artikeln anzeigen. Was aber, wenn Sie anschließend wieder alle Artikel anzeigen möchten Für diesen Fall können Sie dem Kombinationsfeld einen Eintrag etwa mit dem Wert
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1406_DatensaetzeFilternPerKombinationsfeld.mdb.
Wenn Sie in einem Unterformular oder in einem Listenfeld die übersicht über die Daten einer Tabelle oder Abfrage darstellen, die sich nach verschiedenen Kriterien gruppieren lassen, kann es sinnvoll sein, diese nach diesem Kriterium zu filtern. Im Beispiel schauen wir uns eine übersicht aller Artikel einer Datenbank an, die nach der Kategorie gefiltert werden können.
Das Formular frmArtikeluebersicht zeigt die Artikel im Unterformular sfmArtikeluebersicht in der Datenblattansicht an.
Die Tabelle tblArtikel, die dort als Datenherkunft dient, verwendet ein Nachschlagefeld namens KategorieID zur Auswahl eines der Datensätze der verknüpften Tabelle tblKategorien (weitere Informationen zum Aufbau dieses Formulars erhalten Sie im Artikel Datenübergabe zwischen Formularen).
Kombinationsfeld zum Filtern
Genau nach den Daten dieses Feldes wollen wir nun über ein Kombinationsfeld im Hauptformular filtern. Das bedeutet, dass wir im Kombinationsfeld alle Datensätze der Tabelle tblKategorien anbieten. Dieses Kombinationsfeld platzieren wir wie in Bild 1 oben im Formular und legen die Bezeichnung cboKategorien fest.
Bild 1: Kombinationsfeld zum Filtern nach einer Kategorie
Damit dieses alle Kategorien anzeigt, stellen wir die Eigenschaft Datensatzherkunft auf eine entsprechende Abfrage ein. Diese sieht wie in Bild 2 aus. Die Abfrage liefert alle Datensätze der Tabelle tblKategorien, wobei diese nach dem Wert des Feldes Kategorie aufsteigend sortiert werden.
Bild 2: Datensatzherkunft des Kombinationsfeldes cboKategorien
Damit das Kombinationsfeld nur das Feld mit den Bezeichnungen der Kategorien anzeigt, aber nicht den Inhalt des Primärschlüsselfeldes, stellen Sie außerdem die Eigenschaft Spaltenanzahl auf den Wert 2 und Spaltenbreiten auf 0cm ein. Dadurch ist das Feld KategorieID zwar Bestandteil der Datensatzherkunft des Kombinationsfeldes und liefert auch den Wert der gebundenen Spalte des ausgewählten Datensatzes, aber es ist nicht sichtbar. Das Kombinationsfeld zeigt seine Daten nun wie in Bild 3 an.
Bild 3: Auswahl einer der Kategorien als Filter für die angezeigten Datensätze im Unterformular
Unterformular filtern
Nun soll das Unterformular nach der Auswahl nur die Artikel anzeigen, die zur ausgewählten Kategorie gehören.
Zum Verständnis sind zwei Hinweise notwendig: Sowohl das Kombinationsfeld zur Auswahl der als Filter zu verwendenden Kategorie als auch das Feld mit der jeweiligen Kategorie der Artikel im Unterformular enthalten nicht die Kategorien, sondern lediglich die Primärschlüsselfelder der Werte der Tabelle tblKategorien.
Wir müssen also den Filter für die Datenherkunft des Unterformulars so einstellen, dass das Feld KategorieID als Vergleichswert den Zahlenwert aus dem Kombinationsfeld cboKategorien erhält.
Die Kurzfassung erfordert lediglich zwei Befehle (siehe Listing 1). Der erste stellt die Eigenschaft Filter des im Unterformularsteuerelements (sfm-Ar-ti-keluebersicht) enthaltenen For-mulars (Form) im aktuellen Formular (Me) auf den folgenden Ausdruck ein:
Private Sub cboKategorien_AfterUpdate() Me!sfmArtikeluebersicht.Form.Filter = "KategorieID = " & Me!cboKategorien Me!sfmArtikeluebersicht.Form.FilterOn = True End Sub
Listing 1: Unterformular nach einem Wert eines Steuerelements im Hauptformular filtern
"KategorieID = " & Me!cboKategorien
Wenn das Kombinationsfeld (Me!cboKategorien) beispielsweise den Wert 1 enthält, sieht der Filterausdruck so aus:
KategorieID = 1
Der zweite Befehl aktiviert den Filter, indem er die Eigenschaft FilterOn auf den Wert True einstellt.
Dies ließe sich noch etwas übersichtlicher formulieren (siehe Listing 2). Wenn Sie beginnen, in VBA mit Ausdrücken wie mit diesem Filterausdruck zu arbeiten, sollten Sie den Filterausdruck bei Bedarf im Direktfenster ausgeben können. Dazu verwenden wir hier die Variable strFilter. Diese füllt die Prozedur zunächst mit dem ausgewerteten Ausdruck “Kategorie = ” & Me!cboKategorien und gibt dann den Inhalt der Variablen im Direktfenster aus (zum Beispiel Kategorie = 1).
Private Sub cboKategorien_AfterUpdate() Dim strFilter As String strFilter = "KategorieID = " & Me!cboKategorien Debug.Print strFilter With Me!sfmArtikeluebersicht.Form .Filter = strFilter .FilterOn = True End With End Sub
Listing 2: übersichtlichere Variante mit der Möglichkeit, den Filterausdruck im Direktfenster auszugeben
Anschließend haben wir die beiden doch eher länglichen Ausdrücke zum Zuweisen und Aktivieren des Filters entzerrt, indem wir mit der With-Anweisung das Objekt benennen, auf das sich die folgenden Eigenschaften beziehen. Wie Bild 4 zeigt, funktioniert das Filtern bereits wie gewünscht.
Bild 4: Filtern nach einer der Kategorien
Filter aufheben
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: