Home > Artikel > Ausgabe 6/2018 > Formularansicht filtern

Formularansicht filtern

  PDF ansehen

  Download PDF und Beispieldatenbank

Access bietet einige Möglichkeiten, um die Daten in Formularen zu filtern – zum Beispiel die Möglichkeiten, die auftauchen, wenn Sie das Kontextmenü eines Feldes in der Formularansicht anzeigen oder die Funktionen, die über das Ribbon zur Verfügung stehen. Wir schauen uns diese Möglichkeiten in diesem Artikel einmal im Detail an und schauen, wie wir diese Funktionen per VBA aufrufen können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1806_FormulareFiltern.accdb.

Beispielformular

Für die Beispiele verwenden wir ein Formular namens frmArtikelFiltern, das wir mit der Tabelle tblArtikel als Datensatzquelle versehen und mit dem wir alle Felder dieser Tabelle anzeigen. Wenn wir das Formular in der Formularansicht anzeigen und dann mit der rechten Maustaste etwa auf das Textfeld Artikelname klicken, finden wir bereits verschiedene Filterfunktionen vor, die wir direkt anwählen können – zum Beispiel Ist gleich "Chai" oder Ist ungleich "Chai". Es gibt aber auch noch das Menü Textfilter, das weitere Befehle wie Gleich..., Nicht gleich..., Beginnt mit... und so weiter anbietet (siehe Bild 1).

Formular-Entwurf unseres Beispielformulars

Bild 1: Formular-Entwurf unseres Beispielformulars

Die Einträge im Hauptmenü filtern direkt mit Ausdrücken, die den aktuellen Wert als Vergleichswert enthalten, die im Untermenü ermöglichen die Anzeige eines kleinen Eingabefeldes, mit dem der Vergleichswert für die gewählte Option ausgewählt werden können. Hier können Sie dann beispielsweise den Wert eingeben, mit dem die zu suchenden Einträge für dieses Feld beginnen (siehe Bild 2). Nach der Eingabe des Vergleichswertes und dem Betätigen der OK-Schaltfläche wird der Filter genau wie bei den Schnellfiltern aus dem ersten Menü auf alle Datensätze des Formulars angewendet.

Eingabe eines Filtervergleichswertes

Bild 2: Eingabe eines Filtervergleichswertes

Was ist passiert?

Was genau haben wir durch diese Aktion erledigt? Wir haben einen Filter definiert und diesen auf die Daten des Formulars angewendet. Können wir irgendwie herausfinden, welcher Filterausdruck nun genau wirkt? Ja, das geht – und zwar per VBA. Wir brauchen einfach nur den Wert der Eigenschaft Filter des Formulars auszugeben. Das gelingt etwa mit dem folgenden Befehl im Direktbereich des VBA-Editors (anzuzeigen über die Tastenkombination Strg + G):

Forms!frmArtikelFiltern.Filter

([tblArtikel].[Artikelname] Like "C*")

Der Filterausdruck vergleicht also den Inhalt des Feldes Artikelname mit der Zeichenkette C*.

Was geschieht, wenn wir einen weiteren Filter für genau das gleiche Feld definieren – beispielsweise einen, der alle Artikel liefert, die den Buchstaben A enthalten? Dann wählen wir als Erstes den Kontextmenü-Eintrag Textfilter|Enthält... für das Feld Artikelname. Den resultierenden Filterausdruck ermitteln wir dann mit dem gleichen Befehl wie oben:

Forms!frmArtikelFiltern.Filter

(([tblArtikel].[Artikelname] Like "C*")) AND ([tblArtikel].[Artikelname] Like "*A*")

Wenn wir einen zweiten Filter festlegen, fügt Access diesen also zum bestehenden ersten Filter hinzu – und zwar mit einer AND-Verknüpfung.

Filter entfernen

Wie können wir den Filter wieder aus dem Formular entfernen – beispielsweise, um danach einen komplett neuen Filterausdruck zu definieren? Wenn es nur um die Filter geht, die Sie für ein bestimmtes Steuer­element angelegt haben, betätigen Sie den Kontextmenü-Eintrag Filter löschen aus Artikelname. Das Formular entfernt dann den Filter für das Feld Artikelname.

Und wenn wir nicht nur Filterausdrücke für das Feld Artikelname definiert haben, sondern auch noch für andere Felder? Probieren wir es aus, indem wir einen Filter für das Feld Artikelname und einen für Lieferant einstellen. Dann geben wir den Filterausdruck wieder im Direktbereich des VBA-Editors aus:

Forms!frmArtikelFiltern.Filter

(([tblArtikel].[Artikelname] Like "C*")) AND ([Lookup_LieferantID].[Firma] Like "*A*")

Hier ist schon der zweite Teil interessant – aber den schauen wir uns gleich an. Erst einmal entfernen wir nun den Filter für das Feld Artikelname. Danach sieht der Filterausdruck wie folgt aus:

Forms!frmArtikelFiltern.Filter

(([Lookup_LieferantID].[Firma] Like "*A*"))

Der Filter für ein Feld wird also sorgfältig aus dem gesamten Filterausdruck entfernt.

Lookup-Filter

Damit kommen wir zu dem interessanten Ausdruck, der als Filter für das Feld Lieferant eingestellt wurde – und der ohne Klammern wie folgt aussieht:

[Lookup_LieferantID].[Firma] Like "*A*"

Dieser Ausdruck nimmt also auf ein Feld namens Lookup_LieferantID Bezug und ermittelt dann dessen Werte für das Feld Firma.

Wenn wir etwa in der Ereignisprozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird, den Filter so setzen, funktioniert das ebenfalls:

Private Sub Form_Load()

Me.Filter = "Lookup_LieferantID.Firma LIKE '*A*'"

Me.FilterOn = True

End Sub

Filter für Zahlenfelder

Bei Zahlenfeldern sehen die Filtermöglichkeiten im Kontextmenü etwas anders aus. Hier finden Sie vier Einträge im Hauptmenü, mit denen Sie nach Werten gleich, ungleich, kleiner gleich oder größer gleich dem Wert der aktuellen Zeile filtern können. Unter Zahlenfilter finden Sie weitere Elemente, mit denen Sie gleiche, ungleiche, kleinere und größere Werte filtern können und auch Werte, die zwischen zwei angegebenen Werten liegen (siehe Bild 3).

Filter für Zahlenfelder

Bild 3: Filter für Zahlenfelder

Wenn Sie letztere Möglichkeit auswählen, erscheint ein Dialog, mit dem Sie die obere und die untere Grenze für die zu suchenden Werte eingeben können (siehe Bild 4). Dies liefert etwa den folgenden Ausdruck für die Filter-Eigenschaft:

Filtern zwischen zwei Zahlenwerten

Bild 4: Filtern zwischen zwei Zahlenwerten

([tblArtikel].[Einzelpreis] Between 10 And 12)

Nach Datum filtern

Richtig interessant wird es, wenn Sie die Filteroptionen im Kontextmenü für ein Datumsfeld anzeigen. Diese sehen wie in Bild 5 aus. Hier geht es sogar bis in eine dritte Menüebene.

Datumsfilter per Kontextmenü

Bild 5: Datumsfilter per Kontextmenü

Hier können Sie nicht nur die flexiblen Werte eingeben wie sie auch für Zahlen zur Verfügung stehen, sondern auch bestimmte Zeiträume eingrenzen wie morgen, gestern, heute, nächste Woche, nächsten Montag, nächstes Quartal, Vergangenheit, Zukunft und so weiter.

Filtern über das Ribbon

Wenn Sie ein gebundenes Steuer­element im Formular markiert haben, können Sie im Ribbon unter Start|Sortieren und Filtern das Menü Auswahl aufklappen und dort einen der Einträge auswählen, die Sie auch direkt auf der ersten Ebene des Kontextmenüs für das entsprechende Steuer­element finden können (siehe Bild 6).

Ribbon-Befehle zum schnellen Filtern

Bild 6: Ribbon-Befehle zum schnellen Filtern

Filter ein- und ausschalten

Hier im Ribbon findet man auch noch den Befehl Filter ein/aus, mit dem Sie den aktuellen Filter komplett ausschalten und wieder einschalten können.

Weitere Filteroptionen wie im Datenblatt

In der Datenblattansicht von Tabellen, Abfragen und Formularen finden Sie noch rechts im Spaltenkopf noch eine kleine Schaltfläche mit einem Pfeil nach unten, der weitere Filteroptionen anzeigt.

Diese fehlen in der Formularansicht vermeintlich. Tatsächlich jedoch können Sie auch hier die entsprechenden Optionen anzeigen. Dazu brauchen Sie nur das gewünschte Feld zu markieren und dann im Ribbon den Befehl Filtern aus der Gruppe Start|Sortieren und Filtern auswählen.

Dies öffnet das Popup aus Bild 7. Hier können Sie die Sortierung einstellen, den Filter aus dem aktuellen Feld löschen, einen der Textfilter auswählen, die bereits über das Kontextmenü zur Verfügung gestellt werden und – bisher noch nicht gesehen – Optionen auswählen, um einzustellen, dass nach allen, keinem oder einem oder mehreren bestimmten Einträgen gefiltert wird.

Popup mit weiteren Filterbefehlen

Bild 7: Popup mit weiteren Filterbefehlen

Weitere Filtermöglichkeiten

Es gibt noch einige weitere Filtermöglichkeiten, die wir auch über das Ribbon aufrufen können – zum Beispiel formularbasierte Filter oder Spezialfilter (siehe Bild 8). Diese stellen wir im zweiten Teil dieser Beitragsreihe vor.

Weitere Filter über das Ribbon aufrufen

Bild 8: Weitere Filter über das Ribbon aufrufen