VBA Access – Zu einem bestimmten Datensatz springen

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.

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.

Bestseller Nr. 1
VBA mit Excel: Das umfassende Handbuch für Einsteiger und fortgeschrittene Anwender
  • Bernd Held
  • Herausgeber: Rheinwerk Computing
  • Auflage Nr. 3 (26.01.2018)
  • Gebundene Ausgabe: 995 Seiten
Bestseller Nr. 2
VBA lernen: Das Aufgaben- und Lernbuch zur Programmiersprache VBA
  • René Martin
  • Herausgeber: Books on Demand
  • Auflage Nr. 1 (24.02.2016)
  • Taschenbuch: 496 Seiten

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.

Das könnte dich auch interessieren:

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.