Seriennummer für Tabellenfelder generieren (Access 97)
Veröffentlicht am 30.12.2003
Frage:
Ich möchte eine Seriennummer ermitteln, die sich aus Jahreszahl und fortlaufender Nummer zusammensetzt.
Wie kriege ich Access dazu, zum einen bei jedem Datensatz weiterzuzählen und vorher zu ermitteln, ob noch immer das gleiche Jahr läuft, oder ob es sich um ein neues Jahr handelt und dann wieder bei 1 zu beginnen?
Antwort:
Eine fortlaufende Nummer mit Jahreszahl, die sich beim neuen Jahr wieder zurücksetzt, kann man mit einer VBA-Funktion relativ leicht realisieren.
Legen Sie zunächst ein Textfeld mit einer Länge von mindestens 8 Zeichen in Ihrer Rechnungs-Tabelle (beispielsweise tblRechnungen) an. Für die Rechnungsnummern könnte dieses Feld folgendes Format haben: 00023-99 Diese Nummer stellt also die dreiundzwanzigste Rechnung im Jahr 1999 dar. Um die letzte Rechnungsnummer im aktuellen Jahr zu ermitteln, setzen wir die Max-Funktion in einem Recordset ein:
Dim db As Database
Dim rstLetzteRechNr As Recordset
Dim strJahr As String
strJahr = Right$(Year(Date), 2) ' Aktuelles Jahr, z.b. "99"
Set db = CurrentDb
Set rstLetzteRechNr = db.OpenRecordset("SELECT Max(Left([RechnungNr],5)) AS LetzteRechNr FROM tblRechnungen HAVING Right([RechnungNr],2)='" & strJahr & "';", dbOpenSnapshot)
Im Recordset-Feld LetzteRechNr befindet sich die allerletzte Rechnungsnummer des laufenden Jahres, z.B. „23“. Wenn noch keine Rechnungsnummer in diesem Jahr vorhanden ist, enthält LetzteRechNr den Wert Null. Um die nächste Rechnungsnummer zu ermitteln, addieren Sie 1 zur letzten Rechnung und formatieren Sie das Ergebnis zusammen mit dem Jahr:
If IsNull(rstLastRechNr!LastRechNr) Then
'erste Rechnung hat die Nummer 1
NeueRechnungNr = Format$(1, "00000-") & strJahr
Else
'nächste Rechnung wird um 1 erhöht
NeueRechnungNr = Format$(rstLetzteRechNr!LetzteRechNr + 1, "00000-") & strJahr
End If
Die Variable NeueRechnungNr enthält dann die formatierte Nummer Ihrer nächsten Rechnung. Diese Paar Zeilen VBA-Code können Sie wunderbar in eine Funktion beispielsweise mit dem Namen GetNeueRechnungNr einwickeln. Sobald Sie eine neue Rechnung anlegen, lassen Sie die Rechnungsnummer automatisch generieren, z.B. im Ereignis Vor Eingabe Ihres Rechnungformulars:
Private Sub Form_BeforeInsert(Cancel As Integer)
Me!RechnungNr = GetNeueRechnungNr()
End Sub