ich möchte unter FrmArtikeldaten (Artikeldaten), nach der Eingabe für eine bereits vorhanden Primarschlüssel (ArtNr) eine Meldung ausgeben mit Abbrechen (Schließen), Wiederholen (Neuereintrag und Courser ins Feld ArtNr.) und Ignorieren mit einer Meldung. siehe Anhang.
Ich bekomme Ignorieren nicht mit rein und den Courser niht auf ArtNr. Eingabefeld.
Select case intwahl
case ...
...
Case ...
...
Case ...
...
end Select
wobei man für das Letze auch Case Else nehmen könnte.
Außerdem passt Deine Fehlerbehandlung nicht
Code:
Private Sub cmdSpeichern_Click()
On Error GoTo Err_CmdSpeichern_Click
DoCmd.RunCommand acCmdSaveRecord
Exit_CmdSpeichern_Click:
Exit Sub
MsgBox Err.Description
Resume Exit_CmdSpeichern_Click
End Sub
Entscheide Dich für Err oder Exit und schaue, dass die Meldung vor dem Ende kommt ... Und Du kommst hier sicher auch ohne Resume ... aus.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
28.05.2024, 10:49 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2024, 10:51 von schauan.)
Hallöchen,
schaue doch mal das Makro an. Bei Fehler soll es zur Sprungmarke Err_... gehen, aber da ist keine die so heißt. Eine Exit_... gibt es. Und, wenn Du noch die Meldung sehen willst, klappt das eher nicht von Du zuvor das Makro mit Exit Sub verlässt.
Du hast in der frage aber geschrieben, dass Du Ignore nicht mit rein bekommst. Nun schreibst Du, dass es auf Ignore geht. Wann geht es denn auf Ignore?
Sah Dein Code so aus?
Code:
If intWahl = vbRetry Then
Cancel = True
Me.Undo
ElseIf intWahl = vbCancel Then
SendKeys ("{esc}")
Me.Undo
DoCmd.Close , , acSaveNo
Else
'intWahl = vbIgnore
MsgBox ("Diesen Fehler können Sie nicht Ignorieren!" & vbCr & vbCr & _
"Sie müssen eine korrekte Nummer eingeben !" & vbCr & _
"Klicken Sie auf {ok} und Sie können eine neue ArtNr eingeben." & vbCr & vbCr & _
"Schlagen Sie später in der Online-Hilfe nach !")
End If
wobei man sicherheitshalber vielleicht doch im dritten Fall statt Else dann ElseIf intWahl = vbIgnore Then nehmen könnte / sollte
ich würde es so machen:
Code:
Select Case intWahl
Case vbRetry
Cancel = True
Me.Undo
Case vbCancel
SendKeys ("{esc}")
Me.Undo
DoCmd.Close , , acSaveNo
Case vbIgnore
MsgBox ("Diesen Fehler können Sie nicht Ignorieren!" & vbCr & vbCr & _
"Sie müssen eine korrekte Nummer eingeben !" & vbCr & _
"Klicken Sie auf {ok} und Sie können eine neue ArtNr eingeben." & vbCr & vbCr & _
"Schlagen Sie später in der Online-Hilfe nach !")
End Select
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Moin,
erst mal Danke für deine Hilfe.
Ich habe Case verwendet.
Beim Abbrechen, schließt er das Form nicht.
Wiederholen und Ignorieren funktioniert soweit außer das der Courser nicht wieder in ArtNr geht.
Meine Aufgabe aus dem Lernheft lautet:
Folgendes soll passieren:
• Abbrechen Damit soll das Formular geschlossen werden.
Beachten Sie, dass ein Schließen des Formulars mit einem „falschen“ Primärschlüssel nicht möglich ist.
• Wiederholen Neueingabe. Die falsche Nummer wird gelöscht und der Cursor steht wieder im Eingabefeld.
• Ignorieren öffnet die zweite Messagebox. Bei Bestätigung wird die Nummer wieder auf Null gesetzt und der Cursor steht im Eingabefeld.
' --> Aufgabe
'Private Sub ArtNr_AfterUpdate()
Private Sub ArtNr_BeforeUpdate(Cancel As Integer)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim intWahl As Integer
Set db = CurrentDb()
strSQL = "Select * From tblArtikel Where tblArtikel.ArtNr = " & Me.ArtNr
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
If rs.RecordCount = 0 Then
Exit Sub
End If
intWahl = _
MsgBox("Sorry, diese Nr.:" & rs!ArtNr & " ist bereits belegt mit dem Artikel: " & _
vbCr & rs!ArtBez & vbCr & "Zum Preis von: " & rs!VKPreis & vbCr & vbCr & _
"[Abbrechen] Formular schließen und löschen der Eingabe." & vbCr & _
"[Wiederholen] Geben Sie eine neue Nummer ein!" & vbCr & _
"[Ignorieren] Versuchen Sie es!", _
vbAbortRetryIgnore + vbExclamation, " Doppelter Primärschlüssel!")
Select Case intWahl
Case vbRetry
Cancel = True
Case vbCancel, vbAbort
Cancel = True
SendKeys ("{esc}")
DoCmd.Close , , acSaveNo
Case vbIgnore
Cancel = True
MsgBox "Diesen Fehler können Sie nicht Ignorieren!" & vbCr & vbCr & _
"Sie müssen eine korrekte Nummer eingeben !" & vbCr & _
"Klicken Sie auf {ok} und Sie können eine neue ArtNr eingeben." & vbCr & vbCr & _
"Schlagen Sie später in der Online-Hilfe nach !"
End Select
rs.Close
End Sub
Gruß, Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28 • JuergenRa