Hallo Franz,
du bist ja superschnell!
Ich habe das mit dem Close-Ereigniss gerade ausprobiert. Bringt nichts! Die Meldung kommt immernoch.
vor dem ersten Exit Sub fehlt das Cancel =true
Der erste Teil funktioniert doch perfekt! Da fehlt kein Cancel = true
Poste mal den gesamten Code (mit Copy&:stuck_out_tongue_winking_eye:aste) und nicht nur
solchen fragmetierten Teil, wo man das Meiste erahnen muss.
Kann ich machen:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo fehler
Dim ctl As Control
Dim stMeldungA As String
Dim stMeldungB As String
Dim iAntwortB As Integer
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim AnzahlDS As Single
For Each ctl In Me
If ctl.Properties(„ControlType“) = 111 Or ctl.Properties(„ControlType“) = 109 Then
If ctl.Tag = „x“ Then
If IsNull(ctl.Value) = True Then
stMeldungA = stMeldungA & ctl.Name & vbNewLine
End If
End If
End If
Next
For Each ctl In Me
If ctl.Properties(„ControlType“) = 111 Or ctl.Properties(„ControlType“) = 109 Then
If ctl.Tag = „y“ Then
If IsNull(ctl.Value) = True Then
stMeldungB = stMeldungB & ctl.Name & vbNewLine
End If
End If
End If
Next
If IsNull(Me!Seriennummer.Value) = True Then
Me.Undo
Exit Sub
ElseIf Len(stMeldungA) > 0 Then
If Len(stMeldungA) > 600 Then stMeldungA = Left(stMeldungA, 600) & vbNewLine & „etc.“
stMeldungA = „Folgende erforderliche Felder wurden nicht ausgefüllt:“ & vbNewLine & stMeldungA & vbNewLine & „Bitte tragen Sie die fehlenden Daten ein!“
MsgBox stMeldungA, vbOKOnly + vbCritical, „Warnmeldung“
Me!SAPNr.SetFocus
Cancel = True
Exit Sub
ElseIf Len(stMeldungB) > 0 Then
stMeldungB = „Folgende sinnvolle jedoch nicht erforderliche Felder wurden nicht ausgefüllt:“ & vbNewLine & vbNewLine & stMeldungB & vbNewLine & vbNewLine & „Wollen Sie noch Daten eintragen?“
iAntwortB = MsgBox(stMeldungB, vbYesNo + vbQuestion + vbDefaultButton1, „Warnmeldung“)
If iAntwortB = vbYes Then
Me!SAPNr.SetFocus
Cancel = True
Exit Sub
End If
End If
If Me!Vorgang.Value = „Wareneingang“ _
And Me!Grund.Value = „neu“ _
And Me![dieses Gerät wurde geliefert].Value = „von Lieferant“ _
And Len(Me![als Ersatz für das Gerät mit der Seriennummer].Value) > 0 _
Then
Set db = CurrentDb
Set rst = db.OpenRecordset(„Tabelle Historie“)
AnzahlDS = DCount(„Vorgangsnummer“, „Tabelle Historie“, „[Gerätetyp]=’“ & Me!Gerätetyp.Value & „’ AND [Seriennummer]=’“ & Me![als Ersatz für das Gerät mit der Seriennummer].Value & „’ AND [Vorgang]=‚Info Gerät ersetzt‘ AND [Grund]=‚Ausmustern‘“)
If AnzahlDS = 0 Then
rst.AddNew
rst.Fields(„Gerätetyp“).Value = Me!Gerätetyp.Value
rst.Fields(„Klassifizierung“).Value = Me!Klassifizierung.Value
rst.Fields(„Seriennummer“).Value = Me![als Ersatz für das Gerät mit der Seriennummer].Value
rst.Fields(„Vorgang“).Value = „Info Gerät ersetzt“
rst.Fields(„Datum des Vorgangs“).Value = Me![Datum des Vorgangs].Value
rst.Fields(„Grund“).Value = „Ausmustern“
rst.Fields(„Art des Geschäftspartners“).Value = „Lieferant“
rst.Fields(„laufende Nummer des Geschäftspartners“).Value = Me![laufende Nummer des Geschäftspartners].Value
rst.Fields(„dieses Gerät wurde geliefert“).Value = „von Lieferant ersetzt durch“
rst.Fields(„als Ersatz für das Gerät mit der Seriennummer“).Value = Me!Seriennummer.Value
If Len(Me!Schriftstück.Value) > 0 Then rst.Fields(„Schriftstück“).Value = Me!Schriftstück.Value
If Len(Me!Schriftstücknummer.Value) > 0 Then rst.Fields(„Schriftstücknummer“).Value = Me!Schriftstücknummer.Value
If Len(Me!Schriftstückdatum.Value) > 0 Then rst.Fields(„Schriftstückdatum“).Value = Me!Schriftstückdatum.Value
rst.Fields(„Ersteller bzw Prüfer“).Value = Me![Ersteller bzw Prüfer].Value
If Len(Me!Sonstiges.Value) > 0 Then rst.Fields(„Sonstiges“).Value = Me!Sonstiges.Value
rst.Update
rst.Close
End If
Set rst = Nothing
Set db = Nothing
MsgBox „Info Gerät ersetzt für SN " & Me![als Ersatz für das Gerät mit der Seriennummer] & " in ‚Tabelle Historie‘ geschrieben“
ElseIf Me!Vorgang.Value = „Warenausgang“ _
And Me!Grund.Value = „RTN“ _
And Me![dieses Gerät wurde geliefert].Value = „an Kunde“ _
And Len(Me![als Ersatz für das Gerät mit der Seriennummer].Value) > 0 _
Then
Set db = CurrentDb
Set rst = db.OpenRecordset(„Tabelle Historie“)
AnzahlDS = DCount(„Vorgangsnummer“, „Tabelle Historie“, „[Gerätetyp]=’“ & Me!Gerätetyp.Value & „’ AND [Seriennummer]=’“ & Me![als Ersatz für das Gerät mit der Seriennummer].Value & „’ AND [Vorgang]=‚Info Gerät ersetzt‘ AND [Grund]=‚RTN‘“)
If AnzahlDS = 0 Then
rst.AddNew
rst.Fields(„Gerätetyp“).Value = Me!Gerätetyp.Value
rst.Fields(„Klassifizierung“).Value = Me!Klassifizierung.Value
rst.Fields(„Seriennummer“).Value = Me![als Ersatz für das Gerät mit der Seriennummer].Value
rst.Fields(„Vorgang“).Value = „Info Gerät ersetzt“
rst.Fields(„Datum des Vorgangs“).Value = Me![Datum des Vorgangs].Value
rst.Fields(„Grund“).Value = „RTN“
rst.Fields(„Art des Geschäftspartners“).Value = „Kunde“
rst.Fields(„laufende Nummer des Geschäftspartners“).Value = Me![laufende Nummer des Geschäftspartners].Value
rst.Fields(„dieses Gerät wurde geliefert“).Value = „von Pico ersetzt durch“
rst.Fields(„als Ersatz für das Gerät mit der Seriennummer“).Value = Me!Seriennummer.Value
If Len(Me!Schriftstück.Value) > 0 Then rst.Fields(„Schriftstück“).Value = Me!Schriftstück.Value
If Len(Me!Schriftstücknummer.Value) > 0 Then rst.Fields(„Schriftstücknummer“).Value = Me!Schriftstücknummer.Value
If Len(Me!Schriftstückdatum.Value) > 0 Then rst.Fields(„Schriftstückdatum“).Value = Me!Schriftstückdatum.Value
rst.Fields(„Ersteller bzw Prüfer“).Value = Me![Ersteller bzw Prüfer].Value
If Len(Me!Sonstiges.Value) > 0 Then rst.Fields(„Sonstiges“).Value = Me!Sonstiges.Value
rst.Update
rst.Close
End If
Set rst = Nothing
Set db = Nothing
MsgBox „Info Gerät ersetzt für SN " & Me![als Ersatz für das Gerät mit der Seriennummer] & " in ‚Tabelle Historie‘ geschrieben“
End If
fehler:
If Err.Number = 0 Then
Cancel = True
ElseIf Err.Number = 2105 Then
MsgBox „Der erste/letzte Datensatz wurde bereits erreicht!“ & vbNewLine & „Weiter vor/hinter geht es nicht!“
Me!SAPNr.SetFocus
Cancel = True
Else
MsgBox „Es ist ein Fehler mit der Nummer " & Err.Number & " aufgetreten!“ & vbNewLine & "Wenden Sie sich bitte an den Datenbankersteller mit der Fehlernr und der Information: " & vbNewLine & "Fehler im ‚Sub Form_BeforeUpdate‘ im ‚Formular Warenwirtschaft alle‘ "
End If
End Sub
Private Sub Form_Close()
On Error Resume Next
End Sub
Ich hab es halt gekürzt, weil der ganze Programmtext etwas unübersichtlich ist.
Ich bin gespannt auf den nächsten Vorschlag 
Hoffnungsvolle Grüße
Aiwala