{"id":55001603,"date":"2026-06-01T00:00:00","date_gmt":"2026-04-22T08:47:11","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1603"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/","title":{"rendered":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung"},"content":{"rendered":"<p><b>Access bietet von Haus aus komfortable M&ouml;glichkeiten zum Filtern von Datens&auml;tzen &#8211; &uuml;ber das Ribbon, &uuml;ber das Dropdown-Men&uuml; im Spaltenkopf des Datenblatts oder &uuml;ber eigene Filtereigenschaften des Formulars. Diese L&ouml;sungen sto&szlig;en jedoch schnell an ihre Grenzen, sobald man komplexere Filterbedingungen kombinieren m&ouml;chte oder dem Benutzer eine moderne, &uuml;bersichtliche Filteroberfl&auml;che bieten will. Wir stellen in dieser zweiteiligen Beitragsreihe ein universell einsetzbares Filterformular vor, das sich mit wenigen Handgriffen in jedes bestehende Formular einbauen l&auml;sst. Im ersten Teil zeigen wir, wie das Filterformular eingebaut und bedient wird. Der zweite Teil beleuchtet die Programmierung hinter den Kulissen.<\/b><\/p>\n<h2>Der Ausgangspunkt: Ein Formular mit vielen Datens&auml;tzen<\/h2>\n<p>Bild 1 zeigt das Ausgangsformular <b>frmDatenMitFilter<\/b> mit einer Kundentabelle &#8211; 100 Datens&auml;tze, dargestellt als Datenblatt in einem Unterformular. In der Kopfzeile des Formulars befindet sich die Schaltfl&auml;che <b>Filtern<\/b>, die das Filterformular &ouml;ffnet. Der Benutzer sieht zun&auml;chst alle Datens&auml;tze und kann &uuml;ber diese Schaltfl&auml;che jederzeit einen Filter setzen oder anpassen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_001.png\" alt=\"Das Ausgangsformular mit 100 Kundendatens&auml;tzen und der Schaltfl&auml;che zum &Ouml;ffnen des Filterformulars\" width=\"499,5589\" height=\"305,2859\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Das Ausgangsformular mit 100 Kundendatens&auml;tzen und der Schaltfl&auml;che zum &Ouml;ffnen des Filterformulars<\/span><\/b><\/p>\n<p>Mit einem Klick auf <b>Filtern<\/b> &ouml;ffnet sich das Filterformular <b>amvFilter<\/b> als schwebendes Popup-Fenster. Das Ausgangsformular bleibt dabei vollst&auml;ndig bedienbar im Hintergrund &#8211; der Benutzer kann das Filterformular verschieben, um die Datens&auml;tze im Hintergrund zu sehen.<\/p>\n<h2>Das Filterformular beim &Ouml;ffnen<\/h2>\n<p>Bild 2 zeigt das frisch ge&ouml;ffnete Filterformular. Es startet stets leer und kompakt: Eine einzige Filterzeile ist sichtbar, bestehend aus einem Kombinationsfeld f&uuml;r die Feldauswahl und einem noch deaktivierten Kombinationsfeld f&uuml;r die Bedingungsauswahl. Die Schaltfl&auml;chen <b>Zur&uuml;cksetzen<\/b> und <b>Filter anwenden<\/b> sind zun&auml;chst deaktiviert &#8211; sie werden erst aktiv wenn mindestens eine Filterbedingung ausgef&uuml;llt ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_002.png\" alt=\"Das Filterformular startet leer - Schaltfl&auml;chen sind noch deaktiviert\" width=\"599,559\" height=\"190,55\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Filterformular startet leer &#8211; Schaltfl&auml;chen sind noch deaktiviert<\/span><\/b><\/p>\n<p>Das Filterformular passt seine H&ouml;he stets automatisch an die Anzahl der aktiven Zeilen an. Es startet also bewusst klein und nimmt nur den Platz ein den es gerade ben&ouml;tigt.<\/p>\n<p>Mit jeder neuen Eingabe w&auml;chst es um eine Zeile, beim L&ouml;schen einer Bedingung schrumpft es wieder.<\/p>\n<h2>Schritt 1: Ein Feld ausw&auml;hlen<\/h2>\n<p>Der erste Schritt beim Einrichten eines Filters ist die Auswahl des Feldes das gefiltert werden soll.<\/p>\n<p>Bild 3 zeigt die aufgeklappte Feldauswahlliste: Das Filterformular liest beim &Ouml;ffnen automatisch alle Felder des Recordsets aus dem aufrufenden Formular aus und zeigt sie hier an &#8211; in diesem Fall die Felder der Kundentabelle: <b>KundeID<\/b>, <b>Firma<\/b>, <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Strasse<\/b>, <b>PLZ<\/b>, <b>Ort<\/b>, <b>Geburtsdatum<\/b>, <b>Rating <\/b>und <b>Aktiv<\/b>. Es ist keine manuelle Konfiguration der Felder notwendig.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_003.png\" alt=\"Die Feldauswahlliste zeigt automatisch alle Felder des Recordsets an\" width=\"649,559\" height=\"392,5225\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Feldauswahlliste zeigt automatisch alle Felder des Recordsets an<\/span><\/b><\/p>\n<p>Sobald der Benutzer ein Feld ausw&auml;hlt, passieren zwei Dinge gleichzeitig: Das Bedingungsfeld wird aktiviert und mit den f&uuml;r diesen Feldtyp passenden Vergleichsoperatoren bef&uuml;llt, und darunter erscheint automatisch eine zweite leere Filterzeile.<\/p>\n<p>Das Filterformular erkennt dabei selbstst&auml;ndig ob es sich um ein Text-, Zahlen-, Datums- oder Ja\/Nein-Feld handelt und bietet nur die jeweils sinnvollen Operatoren an.<\/p>\n<h2>Schritt 2: Die Bedingung ausw&auml;hlen<\/h2>\n<p>Bild 4 zeigt die Bedingungsauswahl nachdem das Feld <b>KundeID<\/b> gew&auml;hlt wurde. Da es sich um ein Zahlenfeld handelt, stehen die Operatoren <b>Gleich<\/b>, <b>Nicht gleich<\/b>, <b>Gr&ouml;&szlig;er als<\/b>, <b>Kleiner als<\/b>, <b>Ist zwischen<\/b>, <b>Ist leer<\/b> und <b>Ist nicht leer<\/b> zur Verf&uuml;gung.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_004.png\" alt=\"Die Bedingungsauswahl zeigt nur die f&uuml;r den Feldtyp passenden Operatoren\" width=\"549,559\" height=\"253,1866\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Bedingungsauswahl zeigt nur die f&uuml;r den Feldtyp passenden Operatoren<\/span><\/b><\/p>\n<p>F&uuml;r Textfelder w&auml;ren es andere Operatoren wie <b>Enth&auml;lt<\/b> oder <b>Beginnt mit<\/b> &#8211; der Benutzer sieht immer nur die Optionen die f&uuml;r den gew&auml;hlten Feldtyp tats&auml;chlich sinnvoll sind.<\/p>\n<p>Sobald eine Bedingung ausgew&auml;hlt ist die einen Vergleichswert erfordert, erscheint rechts neben der Bedingungsauswahl automatisch ein Eingabefeld f&uuml;r den Wert. Bei Bedingungen wie <b>Ist leer<\/b> oder <b>Ist nicht leer<\/b> erscheint dagegen kein Eingabefeld &#8211; der Operator allein definiert bereits den vollst&auml;ndigen Filter.<\/p>\n<p>Das Formular validiert Tastatureingaben in Echtzeit: In Eingabefelder f&uuml;r Zahlenwerte k&ouml;nnen nur Ziffern, Komma, Punkt und Minuszeichen eingegeben werden &#8211; alle anderen Zeichen werden stillschweigend abgewiesen.<\/p>\n<h2>Erster Filter anwenden<\/h2>\n<p>Einen ersten Filter sehen wir in Bild 5: Hier haben wir das Feld <b>KundeID<\/b> ausgew&auml;hlt, als Bedingung <b>Gr&ouml;&szlig;er als<\/b> gesetzt und den Wert <b>95<\/b> eingestellt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_005.png\" alt=\"Der erste Filter ist gesetzt - von 100 Datens&auml;tzen bleiben 5 &uuml;brig\" width=\"699,559\" height=\"388,9275\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Der erste Filter ist gesetzt &#8211; von 100 Datens&auml;tzen bleiben 5 &uuml;brig<\/span><\/b><\/p>\n<p>Darunter ist bereits eine zweite leere Zeile sichtbar, bereit f&uuml;r eine weitere Bedingung.<\/p>\n<p>Die Schaltfl&auml;che <b>ODER-Filtergruppe hinzuf&uuml;gen<\/b> ist erschienen, und <b>Filter anwenden<\/b> ist nun aktiv. Ein Klick darauf &uuml;bertr&auml;gt den Filter sofort an das aufrufende Formular &#8211; im Hintergrund sieht man bereits die gefilterten Datens&auml;tze: von 100 Kunden bleiben 5 &uuml;brig, n&auml;mlich alle mit <b>KundeID<\/b> gr&ouml;&szlig;er als 95.<\/p>\n<p>Das Filterformular bleibt nach dem Anwenden ge&ouml;ffnet. Der Benutzer kann es jederzeit anpassen: weitere Bedingungen hinzuf&uuml;gen, bestehende &auml;ndern oder einzelne Zeilen &uuml;ber die rote X-Schaltfl&auml;che am rechten Rand entfernen.<\/p>\n<p>Beim L&ouml;schen einer Zeile schrumpft das Formular automatisch und die verbleibenden Bedingungen r&uuml;cken nach oben.<\/p>\n<h2>Mehrere Bedingungen kombinieren<\/h2>\n<p>Bild 6 zeigt, wie eine zweite Bedingung hinzugef&uuml;gt wurde: Zus&auml;tzlich zur <b>KundeID<\/b>-Bedingung wird nun auch nach dem Firmenfeld gefiltert &#8211; <b>Beginnt mit &#8222;M&#8220;<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_006.png\" alt=\"Zwei UND-verkn&uuml;pfte Bedingungen - nur noch ein Datensatz erf&uuml;llt beide Kriterien\" width=\"699,559\" height=\"417,5063\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Zwei UND-verkn&uuml;pfte Bedingungen &#8211; nur noch ein Datensatz erf&uuml;llt beide Kriterien<\/span><\/b><\/p>\n<p>Beide Bedingungen innerhalb einer Gruppe sind automatisch UND-verkn&uuml;pft: Ein Datensatz muss also beide Bedingungen gleichzeitig erf&uuml;llen um angezeigt zu werden. Das Ergebnis ist entsprechend streng &#8211; von den f&uuml;nf Kunden mit <b>KundeID<\/b> gr&ouml;&szlig;er als <b>95 <\/b>hat nur einer einen Firmennamen der mit <b>M<\/b> beginnt: ein einziger Datensatz bleibt &uuml;brig.<\/p>\n<p>Das Filterformular unterst&uuml;tzt bis zu f&uuml;nf Bedingungen pro Gruppe. Jede neue Feldeingabe f&uuml;gt automatisch eine weitere leere Zeile hinzu, bis das Maximum von f&uuml;nf Zeilen erreicht ist &#8211; dann verschwindet die <b>ODER-Filtergruppe hinzuf&uuml;gen<\/b>-Schaltfl&auml;che, da keine weitere Zeile hinzugef&uuml;gt werden kann.<\/p>\n<h2>ODER-Gruppen und Datumsfelder<\/h2>\n<p>Wir k&ouml;nnen auch ODER-Verkn&uuml;pfungen verwenden, wie Bild 7 zeigt: Die erste Gruppe enth&auml;lt die beiden bekannten Bedingungen auf <b>KundeID<\/b> und <b>Firma<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_007.png\" alt=\"Eine ODER-Gruppe mit Datumsfeld - der Datumstyp-Dropdown bietet vordefinierte Zeitr&auml;ume\" width=\"599,559\" height=\"397,231\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Eine ODER-Gruppe mit Datumsfeld &#8211; der Datumstyp-Dropdown bietet vordefinierte Zeitr&auml;ume<\/span><\/b><\/p>\n<p>Darunter wurde &uuml;ber <b>ODER-Filtergruppe hinzuf&uuml;gen<\/b> eine zweite Gruppe angelegt. In dieser zweiten Gruppe wurde das Feld <b>Geburtsdatum<\/b> gew&auml;hlt und als Bedingung <b>Gleich<\/b> ausgew&auml;hlt. Da es sich um ein Datumsfeld handelt, erscheint rechts neben der Bedingungsauswahl kein einfaches Texteingabefeld, sondern ein weiteres Kombinationsfeld f&uuml;r den Datumstyp.<\/p>\n<p>In diesem Kombinationsfeld kann der Benutzer zwischen einem konkreten Datum und vordefinierten Zeitr&auml;umen w&auml;hlen &#8211; im Bild ist das Dropdown aufgeklappt und zeigt die Optionen <b>Datum<\/b>, <b>Heute<\/b>, <b>Gestern<\/b>, <b>Diese Woche<\/b>, <b>Diesen Monat<\/b>, <b>Dieses Quartal<\/b>, <b>Dieses Jahr<\/b> und <b>Letzte X Tage<\/b>.<\/p>\n<p>W&auml;hlt der Benutzer einen vordefinierten Zeitraum wie <b>Gestern<\/b> oder <b>Diesen Monat<\/b>, berechnet das Filterformular den zugeh&ouml;rigen Datumsbereich automatisch zur Laufzeit &#8211; es ist keine weitere Eingabe notwendig.<\/p>\n<p>W&auml;hlt er <b>Letzte X Tage<\/b>, erscheint ein Eingabefeld f&uuml;r die Anzahl der Tage. W&auml;hlt er <b>Datum<\/b>, erscheint ein Datumsfeld in dem er ein konkretes Datum im Format <b>TT.MM.JJJJ <\/b>eingeben kann.<\/p>\n<p>Die Bedingungen der zweiten ODER-Gruppe sind unabh&auml;ngig von der ersten Gruppe: Ein Datensatz wird angezeigt wenn er entweder alle Bedingungen der ersten Gruppe erf&uuml;llt oder alle Bedingungen der zweiten Gruppe.<\/p>\n<p>Das Formular unterst&uuml;tzt bis zu f&uuml;nf solcher ODER-Gruppen mit je f&uuml;nf Bedingungen &#8211; insgesamt also bis zu 25 Einzelbedingungen.<\/p>\n<h2>Ja\/Nein-Felder<\/h2>\n<p>In Bild 8 sehen wir einen Spezialfall: das Feld <b>Aktiv<\/b> ist ein <b>Ja\/Nein<\/b>-Feld. Das Filterformular erkennt diesen Feldtyp automatisch und bietet als Bedingung ausschlie&szlig;lich <b>Wahr<\/b> und <b>Falsch<\/b> an &#8211; es gibt kein zus&auml;tzliches Eingabefeld, denn die Bedingung selbst legt bereits den Filterwert fest.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_008.png\" alt=\"Ja\/Nein-Felder zeigen nur Wahr und Falsch als Bedingung - kein Eingabefeldr&auml;ume\" width=\"549,559\" height=\"229,3504\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ja\/Nein-Felder zeigen nur Wahr und Falsch als Bedingung &#8211; kein Eingabefeldr&auml;ume<\/span><\/b><\/p>\n<p>Alle anderen Feldtypen wie Textfelder oder Zahlenfelder zeigen diese Bedingungsauswahl nie.<\/p>\n<h2>Die Bedingung &#8222;Ist zwischen&#8220;<\/h2>\n<p>Eine weitere Besonderheit finden wir in Bild 9: Die Bedingung <b>Ist zwischen<\/b> steht f&uuml;r Zahlen- und Datumsfelder zur Verf&uuml;gung. Hier wurde das Feld <b>Rating<\/b> mit der Bedingung <b>Ist zwischen<\/b> und den Werten <b>8<\/b> und <b>10 <\/b>konfiguriert. Das Filterformular blendet bei dieser Bedingung automatisch zwei Eingabefelder nebeneinander ein &#8211; eines f&uuml;r den Von-Wert und eines f&uuml;r den Bis-Wert. Das Ergebnis im Hintergrund zeigt 27 Datens&auml;tze, also alle Kunden mit einem Rating zwischen 8 und 10.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_009.png\" alt=\"Ist zwischen blendet automatisch zwei Eingabefelder ein - 27 Kunden haben ein Rating zwischen 8 und 10\" width=\"700\" height=\"305,8252\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Ist zwischen blendet automatisch zwei Eingabefelder ein &#8211; 27 Kunden haben ein Rating zwischen 8 und 10<\/span><\/b><\/p>\n<p>Bei Datumsfeldern mit der Bedingung <b>Ist zwischen<\/b> erscheinen entsprechend zwei Datumsfelder. Das Filterformular pr&uuml;ft dabei ob das Von-Datum kleiner oder gleich dem Bis-Datum ist &#8211; sollte der Benutzer versehentlich ein sp&auml;teres Von-Datum eingeben als das Bis-Datum, erscheint eine Hinweismeldung.<\/p>\n<h2>Voraussetzungen und Einbau<\/h2>\n<p>F&uuml;r den Einbau des Filterformulars in eine eigene Datenbank werden folgende Elemente aus der Beispieldatenbank dieses Beitrags ben&ouml;tigt:<\/p>\n<ul>\n<li><b>frmFilter<\/b>: das Filterformular selbst<\/li>\n<li><b>mdlFilter<\/b>: das Kernmodul mit allen Hilfsfunktionen f&uuml;r Feldtyperkennung, Wertevalidierung und SQL-Aufbau<\/li>\n<\/ul>\n<p>Beide Elemente lassen sich &uuml;ber den Access-Importmechanismus direkt aus der Beispieldatenbank in die eigene Datenbank &uuml;bernehmen.<\/p>\n<p>&Ouml;ffnen Sie dazu die eigene Datenbank, klicken Sie im Ribbon auf <b>Externe Daten|Neue Datenquelle|Aus Datenbank &#8211; Access<\/b> und w&auml;hlen Sie die Beispieldatenbank dieses Beitrags aus. Im Import-Dialog w&auml;hlen Sie unter <b>Formulare<\/b> das Formular <b>frmFilter<\/b> und unter <b>Module<\/b> das Modul <b>mdlFilter<\/b> aus (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_03\/pic_1603_010.png\" alt=\"Ausw&auml;hlen der zu importierenden Elemente\" width=\"499,5589\" height=\"458,0134\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Ausw&auml;hlen der zu importierenden Elemente<\/span><\/b><\/p>\n<p>Das Filterformular ben&ouml;tigt keine zus&auml;tzlichen Bibliotheken oder Verweise und funktioniert mit jeder Access-Version ab 2010.<\/p>\n<p>Es arbeitet mit klassisch &uuml;ber eine Datensatzquelle gebundenen Formularen und Unterformularen.<\/p>\n<h2>Schritt 1: Den Filterbutton im eigenen Formular anlegen<\/h2>\n<p>&Ouml;ffnen Sie das Formular das gefiltert werden soll im Entwurf und legen Sie eine Schaltfl&auml;che an &#8211; zum Beispiel mit dem Namen <b>cmdFilter<\/b> und der Beschriftung <b>Filtern<\/b>. Dem Klick-Ereignis dieser Schaltfl&auml;che weisen Sie folgenden Code zu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdFilter_Click()\r\n    DoCmd.OpenForm \"frmFilter\"\r\n    <span style=\"color:blue;\">Set<\/span> Forms!frmFilter.CallingForm = Me\r\n    <span style=\"color:blue;\">Set<\/span> Forms!frmFilter.RecordsetForm = Me.Recordset\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die erste Zeile &ouml;ffnet das Filterformular als Popup. Die zweite Zeile &uuml;bergibt ihm eine Referenz auf das aufrufende Formular &uuml;ber die &ouml;ffentliche Eigenschaft <b>CallingForm<\/b> &#8211; das Filterformular ben&ouml;tigt diese um den fertigen Filterausdruck sp&auml;ter an die richtige Stelle zur&uuml;ckliefern zu k&ouml;nnen. Die dritte Zeile &uuml;bergibt das Recordset des Formulars. Das Filterformular liest daraus alle Felder und deren Datentypen aus und bef&uuml;llt die Feldauswahlliste automatisch.<\/p>\n<p>Wenn der Filter nicht auf das Hauptformular sondern auf ein Unterformular wirken soll, &auml;ndert sich die dritte Zeile entsprechend:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> Forms!frmFilter.RecordsetForm = _\r\n    Me.sfmMeinUnterformular.Form.Recordset<\/pre>\n<p>Dies ist die typische Situation wenn das Unterformular ein Datenblatt mit den zu filternden Datens&auml;tzen enth&auml;lt &#8211; genau wie im Beispielformular <b>frmDatenMitFilter<\/b> dieses Beitrags.<\/p>\n<h2>Schritt 2: Die Prozedur FilterAnwenden implementieren<\/h2>\n<p>Das Filterformular kommuniziert mit dem aufrufenden Formular &uuml;ber eine einzige &ouml;ffentliche Prozedur: <b>FilterAnwenden<\/b>. Diese Prozedur muss im Modul des aufrufenden Formulars vorhanden sein.<\/p>\n<p>Das Filterformular ruft sie auf sobald der Benutzer auf <b>Filter anwenden<\/b> oder <b>Zur&uuml;cksetzen<\/b> klickt, und &uuml;bergibt den fertigen <b>WHERE<\/b>-String als Parameter. F&uuml;r ein direkt gebundenes Formular sieht die Prozedur so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>FilterAnwenden(strWhere<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strWhere) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        Me.Filter = <span style=\"color:blue;\">Mid<\/span>(strWhere, 8) 'WHERE abschneiden\r\n        Me.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        Me.FilterOn = <span style=\"color:blue;\">False<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Der &uuml;bergebene <b>WHERE<\/b>-String beginnt immer mit dem Schl&uuml;sselwort <b>WHERE<\/b> gefolgt von einem Leerzeichen &#8211; also etwa <b>WHERE ((KundeID > 95) AND (Firma LIKE &#8218;M*&#8216;))<\/b>. Die <b>Filter<\/b>-Eigenschaft von Access erwartet jedoch nur den Filterausdruck ohne das Schl&uuml;sselwort, daher schneidet <b>Mid(strWhere, 8)<\/b> die ersten sieben Zeichen ab. Wenn <b>strWhere<\/b> leer ist &#8211; also wenn der Benutzer den Filter zur&uuml;ckgesetzt hat &#8211; wird <b>FilterOn<\/b> auf <b>False<\/b> gesetzt und alle Datens&auml;tze werden wieder angezeigt.<\/p>\n<p>Wenn der Filter auf ein Unterformular wirken soll, spricht die Prozedur stattdessen das Unterformular an:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>FilterAnwenden(strWhere<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strWhere) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        Me.sfmMeinUnterformular.Form.Filter = _\r\n            <span style=\"color:blue;\">Mid<\/span>(strWhere, 8)\r\n        Me.sfmMeinUnterformular.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        Me.sfmMeinUnterformular.Form.FilterOn = <span style=\"color:blue;\">False<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur ist in beiden F&auml;llen identisch aufgebaut &#8211; der einzige Unterschied ist das Objekt auf das <b>Filter<\/b> und <b>FilterOn<\/b> angewendet werden. Im Beispielformular <b>frmDatenMitFilter<\/b> dieses Beitrags ist <b>sfmDatenMitFilter<\/b> der Name des Unterformular-Steuerelements.<\/p>\n<h2>Schritt 3: Filterformular ebenfalls automatisch schlie&szlig;en<\/h2>\n<p>Damit das Filterformular automatisch geschlossen wird wenn der Benutzer das aufrufende Formular schlie&szlig;t, gen&uuml;gt ein kurzer <b>Form_Unload<\/b>-Handler im aufrufenden Formular:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n    On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n    DoCmd.Close acForm, \"frmFilter\"\r\n    <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das <b>On Error Resume Next<\/b> ist notwendig, weil <b>DoCmd.Close<\/b> einen Laufzeitfehler ausl&ouml;st wenn das Filterformular zu diesem Zeitpunkt bereits manuell vom Benutzer geschlossen wurde. Mit diesen drei Schritten &#8211; Import, Schaltfl&auml;che anlegen, <b>FilterAnwenden<\/b> implementieren &#8211; ist das Filterformular vollst&auml;ndig eingebaut und einsatzbereit. Im zweiten Teil dieser Beitragsreihe unter dem Titel <b>Ein Filterformular f&uuml;r alle F&auml;lle: Die Programmierung <\/b>(<b>www.access-im-unternehmen.de\/****<\/b>) werfen wir einen Blick hinter die Kulissen: Wie erkennt das Formular den Feldtyp, wie baut es den SQL-WHERE-String auf, wie funktioniert die dynamische H&ouml;henanpassung &#8211; und welche technischen Besonderheiten mussten gel&ouml;st werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access bietet von Haus aus komfortable M&ouml;glichkeiten zum Filtern von Datens&auml;tzen &#8211; &uuml;ber das Ribbon, &uuml;ber das Dropdown-Men&uuml; im Spaltenkopf des Datenblatts oder &uuml;ber eigene Filtereigenschaften des Formulars. Diese L&ouml;sungen sto&szlig;en jedoch schnell an ihre Grenzen, sobald man komplexere Filterbedingungen kombinieren m&ouml;chte oder dem Benutzer eine moderne, &uuml;bersichtliche Filteroberfl&auml;che bieten will. Wir stellen in dieser zweiteiligen Beitragsreihe ein universell einsetzbares Filterformular vor, das sich mit wenigen Handgriffen in jedes bestehende Formular einbauen l&auml;sst. Im ersten Teil zeigen wir, wie das Filterformular eingebaut und bedient wird. Der zweite Teil beleuchtet die Programmierung hinter den Kulissen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662026,66032026,44000052],"tags":[],"class_list":["post-55001603","post","type-post","status-publish","format-standard","hentry","category-662026","category-66032026","category-Formulare_und_Steuerelemente"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung\" \/>\n<meta property=\"og:description\" content=\"Access bietet von Haus aus komfortable M&ouml;glichkeiten zum Filtern von Datens&auml;tzen - &uuml;ber das Ribbon, &uuml;ber das Dropdown-Men&uuml; im Spaltenkopf des Datenblatts oder &uuml;ber eigene Filtereigenschaften des Formulars. Diese L&ouml;sungen sto&szlig;en jedoch schnell an ihre Grenzen, sobald man komplexere Filterbedingungen kombinieren m&ouml;chte oder dem Benutzer eine moderne, &uuml;bersichtliche Filteroberfl&auml;che bieten will. Wir stellen in dieser zweiteiligen Beitragsreihe ein universell einsetzbares Filterformular vor, das sich mit wenigen Handgriffen in jedes bestehende Formular einbauen l&auml;sst. Im ersten Teil zeigen wir, wie das Filterformular eingebaut und bedient wird. Der zweite Teil beleuchtet die Programmierung hinter den Kulissen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-22T08:47:11+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung\",\"datePublished\":\"2026-04-22T08:47:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/\"},\"wordCount\":2181,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2026\",\"3\\\/2026\",\"Formulare und Steuerelemente\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/\",\"name\":\"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2026-04-22T08:47:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/","og_locale":"de_DE","og_type":"article","og_title":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung","og_description":"Access bietet von Haus aus komfortable M&ouml;glichkeiten zum Filtern von Datens&auml;tzen - &uuml;ber das Ribbon, &uuml;ber das Dropdown-Men&uuml; im Spaltenkopf des Datenblatts oder &uuml;ber eigene Filtereigenschaften des Formulars. Diese L&ouml;sungen sto&szlig;en jedoch schnell an ihre Grenzen, sobald man komplexere Filterbedingungen kombinieren m&ouml;chte oder dem Benutzer eine moderne, &uuml;bersichtliche Filteroberfl&auml;che bieten will. Wir stellen in dieser zweiteiligen Beitragsreihe ein universell einsetzbares Filterformular vor, das sich mit wenigen Handgriffen in jedes bestehende Formular einbauen l&auml;sst. Im ersten Teil zeigen wir, wie das Filterformular eingebaut und bedient wird. Der zweite Teil beleuchtet die Programmierung hinter den Kulissen.","og_url":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-04-22T08:47:11+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung","datePublished":"2026-04-22T08:47:11+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/"},"wordCount":2181,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2026","3\/2026","Formulare und Steuerelemente"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/","url":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/","name":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2026-04-22T08:47:11+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_fuer_alle_Faelle_Einbau_und_Bedienung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Filterformular f&uuml;r alle F&auml;lle: Einbau und Bedienung"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001603"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001603\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}