Unterformulare zeigen meist mehrere Felder mit Daten in der Datenblatt- oder Endlosansicht an. Der vorliegende Beitrag zeigt, wie Sie schnell nach Begriffen in den im Unterformular angezeigten Daten suchen – ohne zwischendurch die Eingabetaste oder eine Suchen-Schaltfläche betätigen zu müssen.
Warum soll man eigentlich Daten in Unterformularen vom Hauptformular aus filtern oder durchsuchen können Die Antwort ist einfach: Wenn das Unterformular die Daten etwa in der Datenblattansicht zeigt, ist die Unterbringung der für die Filter- oder Suchfunktion notwendigen Steuerelemente schlicht unmöglich, weil Access Kopf- und Fußbereiche von Formularen in der Datenblattansicht ausblendet.
Also bringt man Daten, die man in der Datenblattansicht anzeigen möchte, in einem eigenen Formular unter, das als Unterformular eines weiteren Formulars mit den notwendigen Steuerelementen dient. Bild 1 zeigt das in diesem Beitrag vorgestellte Formular samt Unterformular.
Bild 1: Haupt- und Unterformular mit Suchfunktion
Beispieldaten
Die Daten für dieses Beispiel stammen aus der Tabelle tblParameter, die für das Speichern von Anwendungseinstellungen verantwortlich ist. In diesem Fall stammt diese Tabelle aus der Vertragsverwaltung [1] und enthält einige Konfigurationsdaten für einen Scanner (siehe Bild 2). Das Unterformular enthält diese Tabelle als Datenherkunft und heißt sfmParameter; ziehen Sie alle Felder aus der Feldliste in den Detailbereich und stellen Sie außerdem die Standardansicht auf Datenblatt ein. Gegebenenfalls passen Sie noch die Bezeichnungsfelder an, deren Inhalt in die Kopfzeile der Datenblattansicht übernommen wird. Für eine bessere Optik empfiehlt sich die Anpassung an die Schriftgröße im Hauptformular (Schriftgröße 8). Fügen Sie das Unterformular in ein weiteres Formular namens frmParameter ein und statten Sie dieses mit einem zusätzlichen Textfeld namens txtSuchbegriff aus.
Bild 2: Das Unterformular sfmParameter
Filterfunktion hinzufügen
Nun fehlt nur noch die Filterfunktion: Dazu legen Sie für das Ereignis Bei änderung des Textfeldes txtSuchbegriff einfach die Routine aus Listing 1 an. Das Ereignis Bei änderung wird bei jeder änderung des im Textfeld angezeigten Textes ausgelöst – also sowohl beim Eingeben als auch beim Löschen eines Buchstabens.
Listing 1: Auswerten des Filterkriteriums und filtern des Unterformulars
Private Sub txtSuchbegriff_Change() Dim strSuchbegriff As String strSuchbegriff = Me!txtSuchbegriff.Text If Len(strSuchbegriff) > 0 Then Me!sfmParameter.Form.Filter = _
"Parameter LIKE "*" _
& strSuchbegriff _
& "*' OR Wert LIKE "*"
& strSuchbegriff & "*'" Me!sfmParameter.Form.FilterOn = True Else Me!sfmParameter.Form.FilterOn = False End If End Sub