Veteran
Beiträge: 102
![100](http://donkarl.com/forum/images/decorations/multiple/100.gif)
| Hallo Susanne,
das geht viel einfacher:
1. Du schaltest für ein Feld den AutoWert ein und sorgst im Format für die Jahreszahl. Dann musst Du gar nix machen, hast aber sofort eine Nummer und musst mit Lücken nach gelöschten Datensätzen leben.
oder
2. Du nimmst den AutoWert und ein Datumsfeld und verkettest die im Bericht zu einer schönen Zahl: =Year(fldDatum) & Format(fldID;"0000") mit fldDatum und fldID natürlich für Deine echten Feldnamen.
oder
3. Du schreibst eine Prozedur für einen Button btnNummer im Formular, der das Ergebnis in das Text(wegen Sonderzeichen!)-Feld fldNummer hineinschreibt.
Private Sub btnNummer_Click()
Dim varNr As Variant
'holt den maximalen Wert für dieses Jahr oder, wenn es noch keinen gibt, setzt mit Nz()-Funktion diesen auf 0 statt NULL:
varNr = Nz(DMax("fldNummer","SELECT fldNummer FROM tblAuftraege WHERE fldNummer LIKE '" & Year(Date) &"-????'"), Year(Date) & "-0000")
'nur die letzten Ziffern in Zahl umwandeln und 1 drauf:
varNr = Val(Mid(varNr, 6))+1
'in diesem Formular in das Feld reinschreiben:
Me.fldNummer.Value = Year(Date) & Format(varNr, "0000")
End Sub
Der Code ist nicht getestet, ich hoffe, da sind keine Schreibfehler drin. Er verlässt sich auf vierstellige Ziffernfolgen und erzeugt, wenn Du ihn in einem Formular-Datensatz mit bereits erfolgter Nummerierung aufrufst, auch darin eine neue Nummer, die um 1 größer ist als die bisher maximale. Dieser Code findet auch keine Lücken durch gelöschte Auftragsnummern.
Viel Erfolg,
Lorenz |