{"id":55001610,"date":"2026-08-01T00:00:00","date_gmt":"2026-07-04T19:23:06","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1610"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Filterformular_erweitern_Kombinationsfelder","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/","title":{"rendered":"Filterformular erweitern: Kombinationsfelder"},"content":{"rendered":"<p><b>In den ersten beiden Teilen dieser Beitragsreihe haben wir ein universell einsetzbares Filterformular vorgestellt und seine Programmierung beleuchtet. Bisher bietet das Formular f&uuml;r Vergleichswerte schlicht ein Textfeld an. Bei einem Feld wie &#8222;<b>AnredeID&#8220; oder &#8222;KategorieID&#8220;<\/b>, das im aufrufenden Formular &uuml;ber ein Kombinationsfeld dargestellt wird, muss der Benutzer aber die nackte Zahl kennen, nach der er filtern will &#8211; wenig komfortabel. In diesem Teil erweitern wir das Filterformular so, dass es solche Lookup-Felder erkennt und im Vergleichsfeld dieselbe Auswahlliste anbietet wie das Originalformular.<\/b><\/p>\n<h2>Die Ausgangslage<\/h2>\n<p>Viele Tabellen arbeiten mit Fremdschl&uuml;sseln. In der Kundentabelle aus den ersten Teilen k&ouml;nnte etwa ein Feld <b>AnredeID<\/b> stehen, das auf eine Tabelle <b>tblAnreden<\/b> verweist. Im Datenformular zeigt ein gebundenes Kombinationsfeld dann nicht die ID, sondern den sprechenden Namen an &#8211; also &#8222;Herr&#8220; statt &#8222;1&#8220;. Das Filterformular kennt diese Zuordnung jedoch nicht: Es liest nur das Recordset aus und stellt f&uuml;r ein Zahlenfeld ein Texteingabefeld bereit.<\/p>\n<p>Wie sich das auswirkt, ist in Bild 1 <b>Bild 1<\/b> zu sehen: Der Benutzer m&ouml;chte nach der Kategorie filtern, bekommt aber nur ein leeres Eingabefeld und m&uuml;sste die interne ID erraten. Genau hier setzen wir an. Wir wollen die Filterkriterien f&uuml;r Kombinationsfelder so gestalten, dass wir erstens die Bedingungen anpassen und zweitens die vorhandenen Werte als Vergleichswerte ausw&auml;hlen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_1610_001.png\" alt=\"Bisher muss der Benutzer die interne ID des Kategorie-Feldes kennen\" width=\"649,559\" height=\"425,7244\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Bisher muss der Benutzer die interne ID des Kategorie-Feldes kennen<\/span><\/b><\/p>\n<p>Bild 2 zeigt die neuen Bedingungen f&uuml;r Nachschlagefelder an:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_1610_002.png\" alt=\"Der Zwischenschritt: Wir bekommen f&uuml;r Nachschlagefelder neue Bedingungen.\" width=\"599,559\" height=\"243,952\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Der Zwischenschritt: Wir bekommen f&uuml;r Nachschlagefelder neue Bedingungen.<\/span><\/b><\/p>\n<ul>\n<li><b>Gleich<\/b>: Liefert alle Datens&auml;tze, f&uuml;r die der gleiche Wert ausgew&auml;hlt ist.<\/li>\n<li><b>Nicht gleich<\/b>: Liefert alle Datens&auml;tze, die nicht den ausgew&auml;hlten Wert enthalten.<\/li>\n<li><b>Ist leer<\/b>: Liefert alle Datens&auml;tze, f&uuml;r die das Nachschlagefeld leer ist.<\/li>\n<li><b>Ist nicht leer<\/b>: Liefert alle Datens&auml;tze, f&uuml;r die das Nachschlagefeld nicht leer ist.<\/li>\n<\/ul>\n<p>Bild 3 zeigt, wie wir die vorhandenen Werte als Vergleichswerte ausw&auml;hlen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_1610_003.png\" alt=\"Das Ziel - im Vergleichsfeld erscheint dieselbe Auswahlliste wie im Datenformular.\" width=\"599,559\" height=\"243,952\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das Ziel &#8211; im Vergleichsfeld erscheint dieselbe Auswahlliste wie im Datenformular.<\/span><\/b><\/p>\n<h2>Das Konzept<\/h2>\n<p>Die L&ouml;sung besteht aus drei Bausteinen. Erstens muss das Filterformular beim Einlesen der Felder erkennen, ob ein Feld im aufrufenden Formular &uuml;ber ein Kombinationsfeld dargestellt wird, und sich dessen Datensatzherkunft merken.<\/p>\n<p>Zweitens braucht jede Filterzeile ein zus&auml;tzliches Kombinationsfeld als alternatives Wertfeld. Drittens muss beim Aufbau des SQL-Ausdrucks der gebundene Wert &#8211; also die ID &#8211; verwendet werden, nicht der angezeigte Text.<\/p>\n<p>Der angenehme Nebeneffekt: An der eigentlichen SQL-Logik in <b>GetFilterausdruck<\/b> &auml;ndert sich nichts.<\/p>\n<p>Da das neue Kombinationsfeld seinen gebundenen Wert liefert und der zugrunde liegende Feldtyp (Zahl oder Text) erhalten bleibt, quotiert die Funktion den Wert wie gewohnt &#8211; Zahlen ohne, Texte mit Anf&uuml;hrungszeichen.<\/p>\n<h2>Vorbereitung: &Uuml;bergabe des zu filternden Recordsets durch Formular ersetzen<\/h2>\n<p>Bisher haben wir beim Aufrufen des Filterformulars einen Verweis auf das aufrufende Formular sowie auf das zu filternde Recordset &uuml;bergeben. Um f&uuml;r ein zu filterndes Nachschlagefeld jedoch die notwendigen Informationen zu holen, ben&ouml;tigen wir einen Verweis auf das jeweilige Nachschlagefeld. Deshalb haben wir den Aufruf des Filterformulars so angepasst, dass wir keinen Verweis auf das zu filternde Recordset &uuml;bergeben, sondern einen auf das <b>Form<\/b>-Objekt, welches das Recordset anzeigt.<\/p>\n<p>Der Aufruf &auml;ndert sich also wie folgt:<\/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 = _\r\n        Me.sfmDatenMitFilter.Form\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In <b>Form_frmFilter <\/b>haben wir dazu eine neue Variable hinterlegt:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_frmDaten<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Sie kann &uuml;ber diese &ouml;ffentliche <b>Property Set<\/b>-Prozedur gef&uuml;llt werden:<\/p>\n<pre><span style=\"color:blue;\">Public Property <span style=\"color:blue;\">Set<\/span> <\/span>CallingForm(frm<span style=\"color:blue;\"> As <\/span>Form)\r\n    <span style=\"color:blue;\">Set<\/span> m_frmAufrufend = frm\r\n<span style=\"color:blue;\">End Property<\/span><\/pre>\n<h2>Schritt 1: Lookup-Felder erkennen<\/h2>\n<p>Beim &Ouml;ffnen liest das Filterformular in <b>LadeFelder<\/b> alle Felder des Recordsets aus. An dieser Stelle erg&auml;nzen wir die Erkennung. F&uuml;r jedes Feld pr&uuml;fen wir, ob im aufrufenden Formular ein an dieses Feld gebundenes Kombinationsfeld existiert. Die dazu n&ouml;tigen Metadaten halten wir in einem benutzerdefinierten Typ fest, den wir wie folgt definieren:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Type TKombiInfo\r\n    IstKombi<span style=\"color:blue;\"> As Boolean<\/span>\r\n    RowSource<span style=\"color:blue;\"> As String<\/span>\r\n    RowSourceType<span style=\"color:blue;\"> As String<\/span>\r\n    ColumnCount<span style=\"color:blue;\"> As Integer<\/span>\r\n    ColumnWidths<span style=\"color:blue;\"> As String<\/span>\r\n    BoundColumn<span style=\"color:blue;\"> As Integer<\/span>\r\nEnd Type<\/pre>\n<p>Das Array <b>m_Kombi<\/b> speichert f&uuml;r jedes Recordset-Feld die komplette Konfiguration eines eventuell vorhandenen Kombinationsfelds:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_Kombi()<span style=\"color:blue;\"> As <\/span>TKombiInfo<\/pre>\n<p>Die Matrix <b>m_bolAktKombi<\/b> merkt sich pro Filterzeile, ob das dort gerade gew&auml;hlte Feld ein Lookup-Feld ist &#8211; analog zur bereits vorhandenen Feldtyp-Matrix:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_bolAktKombi(1 To 5, 1 To 5)<span style=\"color:blue;\"> As Boolean<\/span><\/pre>\n<p>Die eigentliche Erkennung erledigt <b>ErmittleKombiInfo<\/b>. Die Prozedur sucht im datentragenden Formular nach einem Steuerelement, dessen Datensatzherkunft (die Eigenschaft <b>ControlSource<\/b>) dem Feldnamen entspricht, und kopiert dessen Eigenschaften in die Struktur (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>ErmittleKombiInfo(strFeld<span style=\"color:blue;\"> As String<\/span>, ByRef tKombi<span style=\"color:blue;\"> As <\/span>TKombiInfo)\r\n    <span style=\"color:blue;\">Dim <\/span>cbo<span style=\"color:blue;\"> As <\/span>ComboBox\r\n    tKombi.IstKombi = <span style=\"color:blue;\">False<\/span>\r\n    <span style=\"color:blue;\">If <\/span>m_frmAufrufend Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">Exit Sub<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> cbo = SucheKombiSteuerelement(m_frmAufrufend, strFeld)\r\n    <span style=\"color:blue;\">If <\/span>cbo Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">Exit Sub<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Nz(cbo.RowSource, \"\")) = 0<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">Exit Sub<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    tKombi.IstKombi = <span style=\"color:blue;\">True<\/span>\r\n    tKombi.RowSource = cbo.RowSource\r\n    tKombi.RowSourceType = cbo.RowSourceType\r\n    tKombi.ColumnCount = cbo.ColumnCount\r\n    tKombi.ColumnWidths = Nz(cbo.ColumnWidths, \"\")\r\n    tKombi.BoundColumn = cbo.BoundColumn\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: ErmittleKombiInfo merkt sich die Liste eines gebundenen Kombinationsfelds<\/span><\/b><\/p>\n<p>Hier ist <b>m_frmDaten<\/b> der entscheidende Punkt. Das zu filternde Recordset geh&ouml;rt immer zu genau einem Formular &#8211; entweder dem Hauptformular selbst oder dem konkret angegebenen Unterformular.<\/p>\n<p>Und genau in diesem Formular sitzen auch die gebundenen Kombinationsfelder, deren Liste wir brauchen. Die Funktion <b>SucheKombiSteuerelement<\/b> durchsucht deshalb Steuerelemente dieses einen Formulars, wie Listing 2 zeigt.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>SucheKombiSteuerelement(frm<span style=\"color:blue;\"> As <\/span>Form, strFeld<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As <\/span>ComboBox\r\n    <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n    For Each ctl In frm.Controls\r\n        <span style=\"color:blue;\">If <\/span>ctl.ControlType = acComboBox<span style=\"color:blue;\"> Then<\/span>\r\n            <span style=\"color:blue;\">If <\/span>StrComp(Nz(ctl.ControlSource, \"\"), strFeld, vbTextCompare) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                <span style=\"color:blue;\">Set<\/span> SucheKombiSteuerelement = ctl\r\n                <span style=\"color:blue;\">Exit Function<\/span>\r\n            <span style=\"color:blue;\">End If<\/span>\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: SucheKombiSteuerelement durchsucht genau das datentragende Formular<\/span><\/b><\/p>\n<p>Damit dieses datentragende Formular &uuml;berhaupt zur Verf&uuml;gung steht, &uuml;bergeben wir es, wie oben bereits beschrieben, statt wie bisher nur das Recordset.<\/p>\n<h2>Schritt 2: Passende Bedingungen anbieten<\/h2>\n<p>F&uuml;r ein Lookup-Feld ergeben nur diskrete Vergleiche Sinn. Operatoren wie <b>Gr&ouml;&szlig;er als<\/b> oder <b>Enth&auml;lt<\/b> w&auml;ren hier unpassend, weil der Benutzer ja einen konkreten Listeneintrag ausw&auml;hlt. Gleichzeitig wollen wir f&uuml;r die Nachschlagefelder keine Eingabe von Vergleichsausdr&uuml;cken mit Platzhaltern erlauben. Deshalb spendieren wir dem Modul <b>mdlFilter<\/b> eine eigene, schlanke Bedingungsliste, die das folgende Listing wiedergibt:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetBedingungRowsourceKombi()<span style=\"color:blue;\"> As String<\/span>\r\n    GetBedingungRowsourceKombi = _\r\n        \"Gleich;Nicht gleich;Ist leer;Ist nicht leer\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Die Prozedur <b>FeldGewaehlt<\/b> ist die zentrale Reaktion auf die Feldauswahl (erster Teil siehe Listing 3). Sie wird von allen 25 <b>After_Update<\/b>-Ereignissen der <b>cboFeld<\/b>-Kombinationsfelder &uuml;ber die Parameter <b>g <\/b>(Gruppe) und <b>z <\/b>(Zeile) aufgerufen und richtet die betreffende Filterzeile vollst&auml;ndig ein. Zuerst liest sie den gew&auml;hlten Feldnamen aus, wobei das umschlie&szlig;ende <b>Nz <\/b>den noch leeren Zustand abf&auml;ngt. Ist kein Feld gew&auml;hlt &#8211; etwa weil der Benutzer die Auswahl wieder geleert hat -, bricht die Prozedur sofort ab, denn ohne Feld gibt es nichts einzurichten.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>FeldGewaehlt(g<span style=\"color:blue;\"> As Integer<\/span>, z<span style=\"color:blue;\"> As Integer<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>strFeld<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngFeldtyp<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>intIdx<span style=\"color:blue;\"> As Integer<\/span>\r\n    strFeld = Nz(Me(\"cboFeld_\" & g & \"_\" & z).Value, \"\")\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strFeld) = 0<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Sub<\/span>\r\n    intIdx = -1\r\n    For i = 0 To m_intFeldanzahl - 1\r\n        <span style=\"color:blue;\">If <\/span>m_strFeldnamen(i) = strFeld<span style=\"color:blue;\"> Then<\/span>\r\n            lngFeldtyp = m_lngFeldtypen(i)\r\n            intIdx = i\r\n            <span style=\"color:blue;\">Exit For<\/span>\r\n        <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Next<\/span> i\r\n    m_lngAktFeldtyp(g, z) = lngFeldtyp\r\n    m_bolAktKombi(g, z) = <span style=\"color:blue;\">False<\/span>\r\n    <span style=\"color:blue;\">If <\/span>intIdx &gt;= 0<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">If <\/span>m_Kombi(intIdx).IstKombi<span style=\"color:blue;\"> Then<\/span> m_bolAktKombi(g, z) = <span style=\"color:blue;\">True<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span>m_bolAktKombi(g, z)<span style=\"color:blue;\"> Then<\/span>\r\n        Me(\"cboBedingung_\" & g & \"_\" & z).RowSource = GetBedingungRowsourceKombi()\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        Me(\"cboBedingung_\" & g & \"_\" & z).RowSource = GetBedingungRowsource(lngFeldtyp)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Prozedur FeldGewaehlt (Teil 1)<\/span><\/b><\/p>\n<p>Den Feldtyp liest die Prozedur nicht erneut aus dem Recordset, sondern aus dem beim &Ouml;ffnen gef&uuml;llten Array <b>m_strFeldnamen<\/b>. Bei einem Treffer &uuml;bernimmt sie den zugeh&ouml;rigen Typ aus <b>m_lngFeldtypen <\/b>und merkt sich zus&auml;tzlich den Array-Index in <b>intIdx<\/b>. Dieser Index ist gleich doppelt n&uuml;tzlich: Er identifiziert das Feld eindeutig und dient kurz darauf als Schl&uuml;ssel in die Kombi-Metadaten.<\/p>\n<p>Der ermittelte Typ wandert in die Matrix <b>m_lngAktFeldtyp<\/b>, damit sp&auml;tere Ereignisse derselben Zeile &#8211; die Tastaturvalidierung oder der SQL-Aufbau &#8211; ihn ohne erneute Suche zur Hand haben.<\/p>\n<p>Dass <b>intIdx <\/b>mit dem Wert <b>-1 <\/b>startet, ist Absicht: So bleibt ein nicht gefundenes Feld erkennbar.<\/p>\n<p>Im n&auml;chsten Schritt entscheidet sich, ob es sich um ein Lookup-Feld handelt. Das Flag <b>m_bolAktKombi <\/b>f&uuml;r diese Zeile wird zun&auml;chst auf <b>False <\/b>gesetzt und nur dann auf <b>True <\/b>eingestellt, wenn ein g&uuml;ltiger Index vorliegt und die zugeh&ouml;rige Kombi-Information <b>IstKombi <\/b>meldet &#8211; also beim Laden ein an dieses Feld gebundenes Kombinationsfeld im datentragenden Formular gefunden wurde. In der geschachtelten <b>If<\/b>-Konstruktion wird erst der Index gepr&uuml;ft, bevor mit <b>m_Kombi(intIdx) <\/b>auf das Array zugegriffen wird, damit ein ung&uuml;ltiger Index keinen Laufzeitfehler ausl&ouml;st.<\/p>\n<p>Vom Kombi-Flag h&auml;ngt nun ab, welche Operatorenliste das Bedingungsfeld erh&auml;lt. F&uuml;r ein Lookup-Feld liefert <b>GetBedingungRowsourceKombi <\/b>die schlanke Liste mit nur den vier sinnvollen Vergleichen, f&uuml;r alle anderen Felder kommt wie gewohnt <b>GetBedingungRowsource <\/b>mit der feldtypabh&auml;ngigen Liste zum Einsatz.<\/p>\n<p>Anschlie&szlig;end wird das Bedingungsfeld aktiviert &#8211; beim Anlegen der Zeile war es deaktiviert &#8211; und sein Wert auf <b>Null <\/b>gesetzt (siehe Listing 4). Dieses Leeren ist wichtig, denn beim Wechsel des Feldes k&ouml;nnte eine zuvor gew&auml;hlte Bedingung zum neuen Feldtyp gar nicht mehr passen.<\/p>\n<pre>    ...\r\n    Me(\"cboBedingung_\" & g & \"_\" & z).Enabled = <span style=\"color:blue;\">True<\/span>\r\n    Me(\"cboBedingung_\" & g & \"_\" & z).Value = Null\r\n    Me(\"txtWert_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"txtWert_\" & g & \"_\" & z).<span style=\"color:blue;\">Left<\/span> = 4440\r\n    Me(\"txtDatum_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"txtDatum_\" & g & \"_\" & z).<span style=\"color:blue;\">Left<\/span> = 6560\r\n    Me(\"txtDatumA_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"txtWert2_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"cboDatumstyp_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"cboJaNein_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    Me(\"cboWert_\" & g & \"_\" & z).Visible = <span style=\"color:blue;\">False<\/span>\r\n    <span style=\"color:blue;\">If <\/span>m_bolAktKombi(g, z)<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">With<\/span> Me(\"cboWert_\" & g & \"_\" & z)\r\n            .RowSourceType = m_Kombi(intIdx).RowSourceType\r\n            .RowSource = m_Kombi(intIdx).RowSource\r\n            .ColumnCount = m_Kombi(intIdx).ColumnCount\r\n            .ColumnWidths = m_Kombi(intIdx).ColumnWidths\r\n            .BoundColumn = m_Kombi(intIdx).BoundColumn\r\n            .<span style=\"color:blue;\">Left<\/span> = 4440\r\n            .Value = Null\r\n        End <span style=\"color:blue;\">With<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span>z = m_intAktiveZeilen(g) And z &lt; cMaxZeilen<span style=\"color:blue;\"> Then<\/span>\r\n        m_intAktiveZeilen(g) = z + 1\r\n        ZeileEinblenden g, z + 1\r\n        AktualisiereFormularHoehe\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    AktualisiereSchaltflaechen\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Die Prozedur FeldGewaehlt (Teil 2)<\/span><\/b><\/p>\n<p>Danach blendet die Prozedur s&auml;mtliche Wertfelder der Zeile aus und setzt deren Positionen zur&uuml;ck. Welches Wertfeld tats&auml;chlich gebraucht wird, steht zu diesem Zeitpunkt noch nicht fest &#8211; eine Bedingung ist ja noch nicht gew&auml;hlt -, also wird vorsorglich alles ausgeblendet. Das Zur&uuml;cksetzen der <b>Left<\/b>-Eigenschaften von <b>txtWert <\/b>und <b>txtDatum <\/b>auf ihre Ausgangswerte ist dabei mehr als Kosmetik: Beide Felder werden bei bestimmten Bedingungen wie Datum &#8222;Ist zwischen&#8220; oder &#8222;Letzte X Tage&#8220; per Code an andere Positionen verschoben. Ohne das Zur&uuml;cksetzen bliebe ein Feld nach einem Feldwechsel an der falschen Stelle stehen.<\/p>\n<p>Handelt es sich um ein <b>Lookup<\/b>-Feld, wird das Kombinationsfeld <b>cboWert <\/b>der Zeile mit den gemerkten Eigenschaften des Originalfelds best&uuml;ckt: Datensatzherkunft, Spaltenanzahl, Spaltenbreiten und gebundene Spalte. Gerade die letzten drei sind entscheidend. Sie sorgen daf&uuml;r, dass das Feld dieselbe &#8211; meist mehrspaltige &#8211; Darstellung mit ausgeblendeter ID-Spalte zeigt wie das Original und &uuml;ber <b>BoundColumn <\/b>sp&auml;ter den richtigen gebundenen Wert, also die ID, liefert. Das tats&auml;chliche Einblenden &uuml;bernimmt allerdings nicht <b>FeldGewaehlt<\/b>, sondern erst <b>BedingungGewaehlt<\/b>, sobald eine Bedingung feststeht.<\/p>\n<p>Den Abschluss bilden zwei Aufgaben rund um die Oberfl&auml;che. War die gerade bef&uuml;llte Zeile die letzte aktive der Gruppe und das Maximum von f&uuml;nf Zeilen noch nicht erreicht, blendet die Prozedur eine weitere leere Eingabezeile ein, erh&ouml;ht den Z&auml;hler <b>m_intAktiveZeilen <\/b>und passt die Formularh&ouml;he an &#8211; so steht nach jeder Feldauswahl automatisch eine frische Zeile bereit.<\/p>\n<p>Der abschlie&szlig;ende Aufruf von <b>AktualisiereSchaltflaechen <\/b>aktiviert schlie&szlig;lich die Schaltfl&auml;chen zum Anwenden und Zur&uuml;cksetzen und steuert die Sichtbarkeit der Schaltfl&auml;che zum Hinzuf&uuml;gen einer <b>ODER<\/b>-Gruppe.<\/p>\n<h2>Schritt 3: &Uuml;brige Prozeduren anpassen<\/h2>\n<p>Damit auch das mehrfache L&ouml;schen und Wiederherstellen von Zeilen sauber funktioniert, ber&uuml;cksichtigen wir das neue Steuerelement zudem an allen Stellen, an denen die &uuml;brigen Wertfelder bereits verwaltet werden &#8211; also in <b>ZeileSetzenSichtbar<\/b>, <b>PositioniereZeilen<\/b>, <b>ZeileLeeren<\/b> und <b>ZeileWiederherstellen<\/b>. Das Muster ist dort jeweils dasselbe wie f&uuml;r <b>txtWert<\/b> &#8211; ein- und ausblenden, Position setzen, Wert leeren. Die &Auml;nderungen wollen wir hier aus Platzgr&uuml;nden nicht vollst&auml;ndig abbilden.<\/p>\n<h2>Schritt 4: Den richtigen Wert f&uuml;r SQL<\/h2>\n<p>Jetzt kommt der entscheidende Punkt. Ein Kombinationsfeld zeigt zwar einen Text an, liefert &uuml;ber seine Value-Eigenschaft aber den Wert der gebundenen Spalte &#8211; bei einem Fremdschl&uuml;ssel also die ID. Beim Auslesen in <b>cmdAnwenden_Click<\/b> ziehen wir den Kombi-Fall deshalb vor und greifen auf <b>cboWert<\/b> statt auf das Textfeld zu. Der entsprechende Ausschnitt sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>m_bolAktKombi(g, z)<span style=\"color:blue;\"> Then<\/span>\r\n    strWert = Nz(Me(\"cboWert_\" & g & \"_\" & z).Value, \"\")\r\n<span style=\"color:blue;\">Else<\/span>\r\n    strWert = Nz(Me(\"txtWert_\" & g & \"_\" & z).Value, \"\")\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strWert) = 0<span style=\"color:blue;\"> Then<\/span>\r\n        strWert = Nz(Me(\"txtDatum_\" & g & \"_\" & z).Value, \"\")\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Den so ermittelten Wert &uuml;bergeben wir wie bisher an <b>GetFilterausdruck<\/b> &#8211; zusammen mit dem unver&auml;nderten Feldtyp aus <b>m_lngAktFeldtyp<\/b>. Dadurch setzt die Funktion eventuelle Anf&uuml;hrungszeichen korrekt: Bei einem Zahlen-Fremdschl&uuml;ssel entsteht ein Ausdruck wie <b>(KategorieID = 3)<\/b>, bei einer Textbindung etwa <b>(Land = &#8218;DE&#8216;)<\/b>. Die SQL-Erzeugung selbst mussten wir also kein einziges Mal anfassen.<\/p>\n<h2>Die 25 Kombinationsfelder per Code anlegen<\/h2>\n<p>Bleibt die Frage, wie die 25 neuen Steuerelemente in das Formular kommen. Sie von Hand anzulegen, w&auml;re m&uuml;hsam und fehleranf&auml;llig &#8211; schlie&szlig;lich m&uuml;ssen alle exakt dem Namensschema <b>cboWert_g_z<\/b> folgen. Wenn Sie also nicht ohnehin die neue Version des Filterformulars in Ihre Anwendung &uuml;bernehmen wollen, weil Sie dieses gegebenenfalls bereits angepasst haben, k&ouml;nnen Sie die Kombinationsfelder mit der Prozedur aus Listing 5 einf&uuml;gen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ErstelleCboWert()\r\n    Const cFormName<span style=\"color:blue;\"> As String<\/span> = \"frmFilter\"\r\n    <span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form\r\n    <span style=\"color:blue;\">Dim <\/span>ctlNeu<span style=\"color:blue;\"> As <\/span>Control\r\n    <span style=\"color:blue;\">Dim <\/span>g<span style=\"color:blue;\"> As Integer<\/span>, z<span style=\"color:blue;\"> As Integer<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strName<span style=\"color:blue;\"> As String<\/span>\r\n    DoCmd.OpenForm cFormName, acDesign, , , , acHidden\r\n    <span style=\"color:blue;\">Set<\/span> frm = Forms(cFormName)\r\n    For g = 1 To 5\r\n        For z = 1 To 5\r\n            strName = \"cboWert_\" & g & \"_\" & z\r\n            <span style=\"color:blue;\">If <\/span>SteuerelementVorhanden(frm, strName)<span style=\"color:blue;\"> Then<\/span> GoTo Weiter\r\n            <span style=\"color:blue;\">Set<\/span> ctlNeu = CreateControl(cFormName, acComboBox, acDetail, \"\", \"\", 4440, 0, 1985, 300)\r\n            ctlNeu.Name = strName\r\n            ctlNeu.Visible = <span style=\"color:blue;\">False<\/span>\r\n            ctlNeu.LimitToList = <span style=\"color:blue;\">True<\/span>\r\n            ctlNeu.RowSourceType = \"Value List\"\r\n            ctlNeu.ColumnCount = 1\r\n            ctlNeu.BoundColumn = 1\r\nWeiter:\r\n            <span style=\"color:blue;\">Set<\/span> ctlNeu = Nothing\r\n        <span style=\"color:blue;\">Next<\/span> z\r\n    <span style=\"color:blue;\">Next<\/span> g\r\n    DoCmd.Save acForm, cFormName\r\n    DoCmd.Close acForm, cFormName, acSaveYes\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Nach dem Aufruf von ErstelleCboWert sind alle 25 Kombinationsfelder vorhanden<\/span><\/b><\/p>\n<p>Die Prozedur &ouml;ffnet <b>frmFilter<\/b> versteckt im Entwurf und legt mit <b>CreateControl<\/b> die fehlenden Kombinationsfelder an. Bereits vorhandene Felder &uuml;berspringt es &#8211; der Aufruf l&auml;sst sich also gefahrlos wiederholen. Datensatzherkunft, Spalten und Position bleiben hier bewusst leer beziehungsweise auf Standardwerten: Das Formularmodul setzt sie ja zur Laufzeit, sobald der Benutzer ein Feld w&auml;hlt. Wichtig ist allein der korrekte Name und die feste Startposition bei <b>Left = 4440<\/b>.<\/p>\n<p>Den Aufruf erledigt man einmalig im Direktfenster mit <b>ErstelleCboWert<\/b>. Nach kurzer Zeit meldet die Prozedur, wie viele Felder angelegt wurden (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_1610_004.png\" alt=\"Die neuen Kombinationsfelder im Filter-Formular\" width=\"599,559\" height=\"368,7763\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die neuen Kombinationsfelder im Filter-Formular<\/span><\/b><\/p>\n<h2>Das Ergebnis in der Praxis<\/h2>\n<p>Damit ist die Erweiterung fertig. Filtert der Benutzer nun nach einem Lookup-Feld, w&auml;hlt er den Wert bequem aus derselben Liste, die er aus dem Datenformular kennt &#8211; ganz ohne interne IDs. Bild 5 zeigt einen kombinierten Filter, bei dem eine Bedingung das Kategorie-Kombinationsfeld nutzt und eine zweite wie gewohnt ein Textfeld.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_04\/pic_1610_005.png\" alt=\"Lookup-Feld und klassisches Textfeld lassen sich frei kombinieren.\" width=\"574,559\" height=\"267,4511\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Lookup-Feld und klassisches Textfeld lassen sich frei kombinieren.<\/span><\/b><\/p>\n<p>F&uuml;r alle Feldtypen, die kein gebundenes Kombinationsfeld im Originalformular haben, bleibt das Verhalten unver&auml;ndert: Text-, Zahlen-, Datums- und Ja\/Nein-Felder zeigen weiterhin ihre gewohnten Eingabefelder. Die Erweiterung greift ausschlie&szlig;lich dort, wo sie einen echten Mehrwert bietet.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit &uuml;berschaubarem Aufwand haben wir das Filterformular um eine komfortable Funktion erweitert. Wir k&ouml;nnen nun nicht nur nach Zahlenwerten, Datumsangaben, Ja\/Nein und Texten suchen, sondern auch gezielt die Werte aus Nachschlagefeldern als Suchkriterien angeben.<\/p>\n<p>Dabei haben wir nicht nur die Vergleichsoperatoren entsprechend angepasst, sondern auch noch Kombinationsfelder hinzugef&uuml;gt, mit denen sich die Vergleichswerte auf Basis der tats&auml;chlich enthaltenen Werte einfach ausw&auml;hlen lassen.<\/p>\n<p>In einer weiteren Folge dieser Beitragsreihe f&uuml;gen wir noch eine Funktion hinzu, mit der wir die einmal eingegebenen Filterkriterien unter dem gew&uuml;nschten Namen speichern und wiederherstellen k&ouml;nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den ersten beiden Teilen dieser Beitragsreihe haben wir ein universell einsetzbares Filterformular vorgestellt und seine Programmierung beleuchtet. Bisher bietet das Formular f&uuml;r Vergleichswerte schlicht ein Textfeld an. Bei einem Feld wie &#8222;AnredeID&#8220; oder &#8222;KategorieID&#8220;, das im aufrufenden Formular &uuml;ber ein Kombinationsfeld dargestellt wird, muss der Benutzer aber die nackte Zahl kennen, nach der er filtern will &#8211; wenig komfortabel. In diesem Teil erweitern wir das Filterformular so, dass es solche Lookup-Felder erkennt und im Vergleichsfeld dieselbe Auswahlliste anbietet wie das Originalformular.<\/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,66042026,44000027],"tags":[],"class_list":["post-55001610","post","type-post","status-publish","format-standard","hentry","category-662026","category-66042026","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Filterformular erweitern: Kombinationsfelder - 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_erweitern_Kombinationsfelder\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Filterformular erweitern: Kombinationsfelder\" \/>\n<meta property=\"og:description\" content=\"In den ersten beiden Teilen dieser Beitragsreihe haben wir ein universell einsetzbares Filterformular vorgestellt und seine Programmierung beleuchtet. Bisher bietet das Formular f&uuml;r Vergleichswerte schlicht ein Textfeld an. Bei einem Feld wie &quot;AnredeID&quot; oder &quot;KategorieID&quot;, das im aufrufenden Formular &uuml;ber ein Kombinationsfeld dargestellt wird, muss der Benutzer aber die nackte Zahl kennen, nach der er filtern will - wenig komfortabel. In diesem Teil erweitern wir das Filterformular so, dass es solche Lookup-Felder erkennt und im Vergleichsfeld dieselbe Auswahlliste anbietet wie das Originalformular.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-04T19:23:06+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=\"14\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_erweitern_Kombinationsfelder\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Filterformular erweitern: Kombinationsfelder\",\"datePublished\":\"2026-07-04T19:23:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/\"},\"wordCount\":2198,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"articleSection\":[\"2026\",\"4\\\/2026\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/\",\"name\":\"Filterformular erweitern: Kombinationsfelder - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2026-07-04T19:23:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Filterformular_erweitern_Kombinationsfelder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Filterformular erweitern: Kombinationsfelder\"}]},{\"@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 erweitern: Kombinationsfelder - 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_erweitern_Kombinationsfelder\/","og_locale":"de_DE","og_type":"article","og_title":"Filterformular erweitern: Kombinationsfelder","og_description":"In den ersten beiden Teilen dieser Beitragsreihe haben wir ein universell einsetzbares Filterformular vorgestellt und seine Programmierung beleuchtet. Bisher bietet das Formular f&uuml;r Vergleichswerte schlicht ein Textfeld an. Bei einem Feld wie \"AnredeID\" oder \"KategorieID\", das im aufrufenden Formular &uuml;ber ein Kombinationsfeld dargestellt wird, muss der Benutzer aber die nackte Zahl kennen, nach der er filtern will - wenig komfortabel. In diesem Teil erweitern wir das Filterformular so, dass es solche Lookup-Felder erkennt und im Vergleichsfeld dieselbe Auswahlliste anbietet wie das Originalformular.","og_url":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-07-04T19:23:06+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Filterformular erweitern: Kombinationsfelder","datePublished":"2026-07-04T19:23:06+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/"},"wordCount":2198,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"articleSection":["2026","4\/2026","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/","url":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/","name":"Filterformular erweitern: Kombinationsfelder - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2026-07-04T19:23:06+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Filterformular_erweitern_Kombinationsfelder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Filterformular erweitern: Kombinationsfelder"}]},{"@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\/55001610","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=55001610"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001610\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}