Hallo Sonnenschein,
der folgende Tip stammt nicht von mir. Ich habe ihn aus einer KnowHow-Datenbank.
Verabschiede dich zunächst mal von dem Feld-Typen „Autowert“. Er birgt auch Fehler, die Du nachher nur aufwändig beseitigen kannst. Lege ein Feld vom Typ long an. Dann den folgenden VBA-Code insFormular:
Public Function DatensatzIDZähler(NamenDesFeldesImFormular As String, DeinFeldnameInDerTabelle As String, NamenDerTabelleDesFeldes As String, Optional Praefix As String, Optional Beginn As Long = 1)
'ich habe mich auch von dem „Autowert“ verabschiedet, da ich es auch für störend
'empfand, dass eine fortlaufende Nr nicht immer gewährleistet ist, deswegen setze
'ich folgende Funktion nach Aktualisierung eines Feldes ein
’ Sascha Münch GSX 550 EU rrr#550
’ [email protected]
'Änderungen: [email protected]
’ Ein fixer
’
'Dim intCurID As Integer
Dim intNewID
Dim frm As Form
Dim ctl As Control
On Error GoTo DatensatzIDZähler_Err
Set frm = Screen.ActiveForm
Set ctl = frm(NamenDesFeldesImFormular)
If IsNull(ctl) Then
’ prüft ob der der maximale Wert eines Feldes ermittelt werden kann. Bei
'neuen/leeren Tabellen ist ja kein Wert vorhanden…
If (IsNull(DMax("[" & DeinFeldnameInDerTabelle & „]“, NamenDerTabelleDesFeldes))) Then
'… dann ist der Anfangswert =1
intNewID = Beginn ’ hier kann auch ein beliebiger Wert stehen, wie z.B. 5000
Else
’ wenn bereits Daten vorhanden sind, wird der maximale Wert ermittelt und um 1 erhöht
intNewID = DMax("[" & DeinFeldnameInDerTabelle & „]“, NamenDerTabelleDesFeldes)
'ggf. numerischen Teil rausextrahieren (um die Länge von Präfix kürzen)
If Len(Trim(Nz(Praefix))) > 0 Then
intNewID = Right(intNewID, (Len(intNewID) - Len(Trim(Nz(Praefix)))))
End If
intNewID = intNewID + 1
End If
’ hier wird der neue Wert (IDZähler) dem Feld zugwiesen
If Len(Trim(Nz(Praefix))) > 0 Then
ctl = Praefix & intNewID
Else
ctl = intNewID
End If
End If
Exit Function
DatensatzIDZähler_Err:
MsgBox "Fkt DatensatzIDZähler - Fehler: " & Err.Number & " " & Err.Description, vbCritical, „Fehler“
End Function