Zuletzt aktualisiert am 25. Dezember 2023 von Lars
So springst du in Visual Basic for Application (VBA) zu einem bestimmten Datensatz.
Variante 1: DoCmd.FindRecord (Datensatz suchen)
Variante 2: Volltextsuche
Eine Volltextsuche lässt sich realisieren, indem man jeden Datensatz durchläuft und via InStr nach dem Suchstring sucht.
Variante 1
'Suchen nach String S_Ident DoCmd.FindRecord S_Ident, acEntire, False, acDown, False, , True
Variante 2
'Variante 2 Public Function GetField(RS As DAO.Recordset, Str_Name As String) As String '--------------------------------------------------------------------- 'Funktion / Prozedur: GetField(RS As DAO.Recordset, Str_Name As String) '--------------------------------------------------------------------- 'Beschreibung: ' Ein Feld einer Tabelle auslesen und zurückgeben, dabei wird ' in leeres Feld abgefangen '--------------------------------------------------------------------- Dim StrRetVal As String On Error GoTo Err_GetField StrRetVal = RS.Fields(Str_Name) GetField = StrRetVal Exit Function Err_GetField: StrRetVal = "" GetField = StrRetVal End Function Sub SearchMain(SearchString As String) Dim MainDB As DAO.Database Dim MainRC As DAO.Recordset Dim Bstr1 As Boolean Bstr1 = False Set MainDB = OpenDatabase(GetDB) Set MainRC = MainDB.OpenRecordset("TblKundeHaupt") MainRC.MoveFirst DoCmd.Hourglass True While Not MainRC.EOF '----------------------------------------- 'Äussere Suchschleife Volltextsuche Anfang '----------------------------------------- If InStr(1, GetField(MainRC, "SFirma"), SearchString) > 0 Then Bstr1 = True End If If InStr(1, GetField(MainRC, "SFirmaFrüher"), SearchString) > 0 Then Bstr1 = True End If If InStr(1, GetField(MainRC, "SAdresse"), SearchString) > 0 Then Bstr1 = True End If If InStr(1, GetField(MainRC, "SPLZ"), SearchString) > 0 Then Bstr1 = True End If If InStr(1, GetField(MainRC, "SOrt"), SearchString) > 0 Then Bstr1 = True End If MainRC.MoveNext Wend If Bstr1 = True Then MsgBox "Gefunden" End IF MainRC.Close MainDB.Close End Sub
Referenz DoCmd.FindRecord
DoCmd.FindRecord Suchen nach[, Vergleichen][, Groß-/Kleinschreibung][, Suchen][, Wie formatiert][, Nur aktuelles Feld][, Am Anfang beginnen]
Die Methode FindRecord verwendet die folgenden Argumente:
der Standardwert (acEntire) verwendet. der Standardwert (acSearchAll) verwendet. der Standardwert (acCurrent) verwendet.
Argument | Beschreibung |
---|---|
Suchen nach | Enthält die zu suchenden Daten. |
Vergleichen | Eine der folgenden eingebauten Konstanten: |
acAnywhere (Suchen im ganzen Feld) acEntire (Standardwert - Das komplette Feld muss mit Suchstring übereinstimmen) acStart (Suchstring wird nur am Anfang des Feldes gefunden) | |
Wenn Sie dieses Argument nicht angeben, wird | |
Groß-/Kleinschreibung | Verwenden Sie True (-1), um bei der Suche Groß- und Kleinschreibung zu beachten, und False (0), um Groß- und Kleinschreibung unberücksichtigt zu lassen. Wenn Sie dieses Argument nicht angeben, wird der Standardwert (False) verwendet. |
Suchen | Eine der folgenden eingebauten Konstanten: |
acDown (sucht abwärts in der Tabelle) acSearchAll (Standardwert - sucht in der kompletten Tabelle) acUp (sucht aufwärts in der Tabelle) | |
Wenn Sie dieses Argument nicht angeben, wird | |
Wie formatiert | Verwenden Sie True, um Daten so zu suchen, wie sie formatiert sind, und False, um Daten so zu suchen, wie sie in der Datenbank gespeichert sind. Wenn Sie dieses Argument nicht angeben, wird der Standardwert (False) verwendet. |
Nur aktuelles Feld | Eine der folgenden eingebauten Konstanten: |
acAll (alle Felder der Tabelle) acCurrent (Standardwert - Nur aktuelles Feld der Tabelle) | |
Wenn Sie dieses Argument nicht angeben, wird | |
Am Anfang beginnen | Verwenden Sie True, um die Suche im ersten Datensatz zu beginnen. Verwenden Sie False, um die Suche im Datensatz zu beginnen, der auf den aktuellen Datensatz folgt. Wenn Sie dieses Argument nicht angeben, wird der Standardwert (True) verwendet. |
Gängiger Fehler und Lösung
Fehler: Ein Makro, das einer der Eigenschaften des aktuellen Feldes zugeordnet ist, konnte wegen eines Fehlers in einem Argument der SuchenDatensatz-Aktion (FindRecord) nicht ausgeführt werden.
Lösung:
Du bist nicht mit DoCmd.GotoControl auf einen Datensatz gegangen
oder
Stelle im Makrofenster das Argument 'Wie formatiert' auf 'Ja' ein. Soll
das Argument auf 'Nein' eingestellt bleiben, musst du die folgenden Schritte
ausführen:
- Stelle das Argument 'Groß-/Klein beachten' auf 'Nein' ein.
- Stelle das Argument 'Aktuelles Feld' auf 'Ja' ein.
- Sorge dafür, dass die Suche in einem gebundenen Steuerelement
erfolgt.
Hallo, hier schreibt Lars. Dipl-Ing. Ingenieurinformatik (FH). Seit Jahrzehnten in der IT tätig. Geprüfter (und begeisterter) Webmaster. Ebenso begeisterter Windows-, Apple-, und Office-User. Ich schreibe über alle möglichen Themen rund um IT. Mehr über mich erfährst du hier: Über mich. Danke für deinen Besuch!