News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

Beitrag aus SmartTools Access Weekly

Laufende Nummer für kategorisierte Datensätze in Access vergeben

Access 365 2024 2021 2019 2016 2013 2010

Datensätze, die einer gemeinsamen Gruppe angehören, möchten Sie in einer Abfrage oder in einem Bericht mit einer laufenden Nummer innerhalb der Gruppe ausgeben. Um das in der Abfrage oder dem Bericht zu lösen, benötigen Sie eine VBA-Funktion, durch die die Lösung allerdings recht langsam wird. Lesen Sie in diesem Tipp der Woche, wie Sie alternativ einige Zeilen VBA-Code direkt im Formular nutzen, um schneller zum Ziel zu kommen.

Einfacher und schneller als mit einer Abfrage gelangen Sie zum Ziel, wenn die laufende Nummer direkt bei der Anlage eines neuen Datensatzes zugeordnet und in der Tabelle gespeichert wird. Sehen wir uns dazu als Beispiel eine auf einer Tabelle "Artikel" basierende Artikelverwaltung an, bei der alle Artikel mit einer Kategorie versehen sind und in der nun innerhalb der Kategorie fortlaufend nummeriert werden soll. Gehen Sie dazu folgendermaßen vor:

  1. Öffnen Sie die Tabelle "Artikel" im Entwurfsmodus, fügen Sie ein Feld "LaufendeNummer" vom Datentyp "Zahl" mit der Feldgröße "Long Integer" hinzu, speichern Sie die Änderungen und verlassen Sie den Tabellenentwurf wieder.
  2. Öffnen Sie das zur Verwaltung der Artikel verwendete Formular, also zum Beispiel "Artikelverwaltung", im Entwurfsmodus und fügen Sie das Feld "LaufendeNummer" an passender Stelle im Formular hinzu.
  3. Stellen Sie die Eigenschaft "Vor Aktualisierung" des Formulars auf "[Ereignisprozedur]" ein, klicken Sie auf die Schaltfläche mit den drei Punkten, um den VBA-Editor zu öffnen und geben Sie folgende Anweisungen ein:
Private Sub Form_BeforeUpdate(Cancel As Integer)
  Dim lf As Variant

  On Error Resume Next
  lf = DMax("[LaufendeNummer]", _
            "[Artikel]", _
            "[Kategorie-Nr]= " & Me.KategorieNr)
  If IsNull(lf) Then 'Nicht gefunden, Vorgabe "1"
    Me.LaufendeNummer = 1
  Else 'Höchste Nummer "+1" setzen
    Me.LaufendeNummer = lf + 1
  End If

End Sub
  1. Diese Funktion ermittelt per "DMax()" die höchste, im Feld "LaufendeNummer" der Tabelle "Artikel" gespeicherte Nummer, wobei die Kategorienummer der aktuellen Kategorienummer im Formular entsprechen muss. Die Feldnamen ersetzen Sie ggf. durch die Namen der in Ihrem Formular und der Tabelle verwendeten Felder.
  2. Speichern Sie die Änderungen.

Wenn Sie das Formular anzeigen und testweise einige Datensätze in der gleichen Kategorie eingeben, werden diese automatisch fortlaufend nummeriert.

Bitte beachten Sie, dass die fortlaufende Nummerierung natürlich erst ab dem Zeitpunkt der Integration dieser Erweiterung erfolgt - eventuell vorhandene Datensätze müssen zunächst manuell um die laufende Nummer ergänzt werden! Das lässt sich leider nicht mit einer Aktualisierungsabfrage erledigen, da Aktualisierungsabfragen immer erst eine temporäre Datensatzgruppe verarbeiten, bevor Ergebnisse in die Tabelle geschrieben werden. Die Abfrage der Tabelle per "DMax()" würde also innerhalb der Aktualisierungsabfrage für jeden Datensatz das gleiche Ergebnis liefern, obwohl dem Feld "LaufendenNummer" in der Aktualisierungsabfrage "DMax() +1" zugewiesen werden würde - diese Änderungen spiegeln sich aber erst nach Ausführung der Aktualisierungsabfrage in der Tabelle wieder.