VBA Tipp: Nächsthöhere Zahl als Standardwert für neuen Datensatz vorgeben

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte beim Anlegen eines neuen Datensatzes den höchsten vorhandenen Wert eines Nummernfeldes auslesen, und den nächsthöheren Wert im neuen Datensatz automatisch als Standardwert vorgeben.

Lösung

Das geht mit den folgenden Sub-Prozeduren (Beispiel 1 und 2), die einer Schaltfläche hinterlegt werden.


In den Beispielen werden folgende Namen verwendet:

  • Tabellenname: tblKunden
  • Tabellenfeldname: KundenNr, Felddatentyp Zahl
  • Schaltflächenname: Schaltfläche_NeuerDatensatz
  • Formularfeldname: KundenNr
  • Nächstes Formularfeld nach KundenNr: NächstesFeld
  • Name des neuen Formulars: NeuerKunde


Die Namen müssen in der eigenen Datenbank entsprechend angepasst werden.

Falls ein Name ein Sonderzeichen enthält, muß der Name in eckige Klammern gesetzt werden, z.B. [Kunden-Nr].


Beispiel 1:

Der neue Datensatz wird im aktuellen, geöffneten Formular angelegt:

Private Sub Schaltfläche_NeuerDatensatz_Click()
 
 'Quelle: http://www.dbwiki.net/
 
 'Neuen Datensatz hinzufügen
 DoCmd.GoToRecord , , acNewRec
 
 'nächsthöhere KundenNr als Standardwert vorgeben (= höchste vorhandene Nummer + 1)
 Me!KundenNr.DefaultValue = DMax("KundenNr", "tblKunden") + 1
 
 'Fokus auf das nächste Feld setzen
 Me!NächstesFeld.SetFocus
 
End Sub

Beispiel 2:

Der neue Datensatz wird in einem anderen, nicht geöffneten Formular angelegt:

Private Sub Schaltfläche_NeuerDatensatz_Click()
 
 'Quelle: http://www.dbwiki.net/
 
 'Anderes Formular öffnen, Modus Neuer Datensatz
 DoCmd.OpenForm "NeuerKunde", , , , acFormAdd
 
 'nächsthöhere KundenNr als Standardwert vorgeben (= höchste vorhandene Nummer + 1)
 Forms!NeuerKunde!KundenNr.DefaultValue = DMax("KundenNr", "tblKunden") + 1
 
 'Fokus auf das nächste Feld setzen
 Forms!NeuerKunde!NächstesFeld.SetFocus
 
End Sub

Hinweis:

Falls die Vergabe der laufenden Nummer nicht von einem festen Schema oder Format abhängig sein muß, empfiehlt es sich, stattdessen in der Tabelle den Felddatentyp "Autowert" zu verwenden, und auf obigen Code zu verzichten.

Web-Links