Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

vbAbortRetryIgnore
#1
Hallo zusammen,

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.

Kann mir da jemand weiterhelfen

Gruß Jürgen.


Angehängte Dateien
.accdb   Artikeldaten.accdb (Größe: 764 KB / Downloads: 2)
Antworten Top
#2
Hallöchen,

entweder Du nimmst
Code:
If...Then
...
ElseIf ... Then
...
Else
...
End If

oder
Code:
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)
Antworten Top
#3
Moin,
wie meinst das mit der Fehlerbehebung und die If ... hatte ich versucht, aber beim Abbrechen geht auf den Befehl Ignorieren.
Antworten Top
#4
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 Smile

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)
Antworten Top
#5
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.

Gruß Jürgen


Angehängte Dateien
.accdb   Aufgabe Artikelbezeichnung1.accdb (Größe: 728 KB / Downloads: 1)
Antworten Top
#6
Hallo Jürgen,

(28.05.2024, 11:19)JuergenRa schrieb: Beim Abbrechen, schließt er das Form nicht.

vbCancel greift nicht, da es in der MsgBox nicht vorkommt. Nimm dafür vbAbort.

Gruß Uwe
Antworten Top
#7
Hallo Uwe,

Danke

bis das der Curser, nicht zurück in das Eingabe Feld ArtNr  geht funktioniert es.

nochmals Danke
Antworten Top
#8
Hallöchen,

für das Eingabefeld nimmst Du SetFocus. Da findest Du im Netz recht gute Anleitungen, sogar bei MS Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • JuergenRa
Antworten Top
#9
Hallo Jürgen,

vbCancel könnte doch vorkommen, und zwar durch die Esc-Taste. Müsstest Du dann vielleicht doch zusätzlich berücksichtigen.

'vbOK = 1
'vbCancel = 2 (auch bei Esc-Taste)
'vbAbort = 3
'vbRetry = 4
'vbIgnore = 5
'vbYes = 6
'vbNo = 7

Teste mal so mit BeforeUpdate:

Code:
' -->  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:
  • JuergenRa
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste