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, 11:49 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2024, 11: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