Hallo Muriel,
diesen Tipp habe ich irgendwo im Internet gefunden …
Versionen: Access 97, 2000 und 2002/XP
Häufig müssen Sie in einem Formular nach einem oder mehreren Datensätzen suchen, von denen Sie lediglich wissen, dass bestimmte Begriffe in irgendeinem Feld vorkommen können. Sie können dazu zwar die Suchfunktion von Access verwenden, aber dazu müssen Sie aber erst einmal den entsprechenden Dialog aufrufen, konfigurieren und anschließend Datensatz für Datensatz durch die Fundstellen blättern.
Die Lösung aus diesem Tipp der Woche erlaubt die Eingabe eines Suchbegriffes direkt im Formular und setzt den Filter des Formulars auf alle Datensätze, in denen der Suchbegriff in einem der Text- oder Memofelder vorkommt. Diese Datensätze können Sie dann der Reihe nach durchblättern und bearbeiten. Die Eingabe eines Sternchens „*“ als Suchbegriff schaltet den Filter wieder aus:
Legen Sie ein neues Modul an und geben Sie die folgende Funktion ein:
Function SearchAllFieldsFilter(strTable As String, \_
strSearch As String) \_
As String
Dim rs As Recordset, intCnt As Integer
Dim strFilter As String, I As Integer
intCnt = 0
Set rs = CurrentDb.OpenRecordset(strTable)
rs.MoveFirst
With rs
For I = 0 To .Fields.Count - 1
If .Fields(I).Type = dbText Or \_
.Fields(I).Type = dbMemo Then
intCnt = intCnt + 1
strFilter = strFilter & \_
"[" & .Fields(I).Name & "] like '\*" & \_
strSearch & "\*' or "
End If
Next I
End With
rs.Close
If intCnt \> 0 Then
'letztes " or " wieder raus
strFilter = Left$(strFilter, Len(strFilter) - 4)
SearchAllFieldsFilter = strFilter
Else
SearchAllFieldsFilter = ""
End If
End Function
Speichern Sie das Modul und verlassen Sie den VBA-Editor.
Basis der Lösung ist die Funktion „SearchAllFieldsFilter()“, die als Parameter den Namen der zu durchsuchenden Tabelle und den Suchbegriff erwartet. Die angegebene Tabelle wird als Recordset geöffnet und auf den ersten Datensatz positioniert. Auf diesem Weg können wir nun auf die „Fields“-Auflistung des Datensatzes zugreifen, die wir wiederum in einer Schleife durchlaufen und zunächst auf den Datentyp prüfen. Handelt sich um ein Text- oder Memofeld nehmen wir es in ein Filter-Statement der folgenden Form auf:
[Feldname] like ‚*Such*‘ or [Feldname] like ‚*Such*‘ or…"
Das Ergebnis sieht dann zum Beispiel so aus:
[Kunden-Code] like ‚*assistent*‘ or [Firma] like
‚*assistent*‘ or [Kontaktperson] like ‚*assistent*‘ or
[Position] like ‚*assistent*‘ or [Straße] like
‚*assistent*‘ or [Ort] like ‚*assistent*‘ or [Region]
like ‚*assistent*‘ or [PLZ] like ‚*assistent*‘ or [Land]
like ‚*assistent*‘ or [Telefon] like ‚*assistent*‘
or [Telefax] like ‚*assistent*‘
Am Ende erscheinen in dem Formular also nur noch die Datensätze, in denen der Suchbegriff in irgendeinem Text- oder Memofeld an einer beliebigen Stelle vorkommt.
Zum Einsatz der Funktion in einem Formular gehen Sie folgendermaßen vor:
Öffnen Sie das gewünschte Formular im Entwurfsmodus.
Legen Sie im Formularkopf oder Formularfuß ein Textfeld „txtSearch“ und setzen Sie die Eigenschaft „Nach Aktualisierung“ auf „[Ereignisprozedur]“.
Klicken Sie auf die Schaltfläche mit den drei Punkten und geben Sie im VBA-Editor die folgenden Anweisungen ein:
Private Sub txtSearch\_AfterUpdate()
Dim strSearch As String, strFilter As String
strSearch = Me.txtSearch
If strSearch = "\*" Then
Me.Filter = ""
Me.FilterOn = False
Exit Sub
End If
strFilter = SearchAllFieldsFilter("Kunden", \_
Me.txtSearch)
If strFilter "" Then
Me.Filter = strFilter
Me.FilterOn = True
End If
End Sub
Ersetzen Sie dabei „Kunden“ durch den Namen der Tabelle, die Ihrem Formular zugrunde liegt. Diese Anweisungen prüfen zunächst die Eingabe: Handelt es sich um ein Sternchen „*“, wird der Filter zurückgesetzt und die Routine verlassen. Das Formular zeigt dann wieder alle Datensätze an. Andernfalls rufen wir „SearchAllFieldsFilter()“ mit dem Namen der Tabelle und dem Suchbegriff auf. Das Ergebnis ist ein Kriterium, das wir direkt der „Filter“-Eigenschaft des Formulars zuordnen und anschließend aktivieren können.
Nachdem Sie diese Änderungen gespeichert und den Entwurfsmodus verlassen haben, können Sie das Formular einem ersten Test unterziehen: geben Sie einen Suchbegriff ein, von dem Sie wissen, dass er in einem Text- oder Memofeld vorkommt. Der Filter für das Formular wird entsprechend gesetzt und es erscheinen nur noch die passenden Datensätze.
…
Ich hoffe, das hilft Dir einigermaßen …
gruss moritzbock
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]