Ich versuche mühsam, alle Makros durch VBA zu ersetzen ...
Wie lautet der Befehl für Formular schließen ohne zu speichern und ohne jegliche Fehlermeldungen zu bringen, z.B. weil ein Feld nicht ausgeführt wurde ...
Ich habs selber hingekriegt mit
Private Sub cmdSchließen_Click()
On Error GoTo Err_cmdSchließen_Click
DoCmd.Close acForm, "frmNEU", acSaveNo
Exit_cmdSchließen_Click:
Exit Sub
Err_cmdSchließen_Click:
MsgBox Err.Description
Resume Exit_cmdSchließen_Click
End Sub
Hallo,
da gibt es ein Missverständnis, denke ich....
Der Parameter "acSaveNo" sorgt nur dafür, dass Änderungen am Form selber nicht gespeichert werden.
Mit Datenspeicherung hat dieser Parameter nichts zu tun.
Wenn ein (auch neuer) Datensätz Änderungen erfahren hat, die noch nicht gespeichert wurden, ist der Wert der Formular-Eigenschaft Dirty = True (Wahr). Man kann in diesem Zustand entweder mit der Formular-Methode Undo Änderungen am Datensatz rückgängig machen (entspricht einem Drücken der Esc-Taste) oder versuchen, die Änderungen zu speichern, indem Dirty = False (Falsch) gesetzt wird. Bei Undo wird das gleichnamige Formular-Ereignis ausgelöst und beim Speicherversuch tritt vorher noch das Formular-Ereignis BeforeUpdate ein. Beide Ereignisse haben ein Cancel-Argument, welches, wenn es auf einen Wert <> 0 gesetzt wird, dafür sorgt, dass die nachfolgende Aktion nicht ausgefört wird.
Das Speichern kann dann von Erfolg oder Mißerfolg gekrönt sein. Bei Erfolg wird das Formular-Ereignis AfterUpdate ausgelöst; bei Mißerfolg wird ein Fehler mit einer Fehlernummer erzeugt, der in der Fehlerbehandlung gezielt bearbeitet oder ganz grob (aber weniger informativ) übergangen werden kann.
Beim Schließen des Formulars wird wie beim Navigieren in Datensätzen auch bei veränderten Daten zuerst BeforeUpdate und anschließend AfterUpdate als Ereignis ausgelöst und jedesmal, wenn etwas nicht koscher ist, ein Fehler ausgelöst. Erst danach geht es mit den Ereignissen Unload und Close beim Schließen, bzw. Current beim Navigieren weiter, wobei Unload wieder durch ein Cancel-Argument abgebrochen werden kann.
Ob nun die Schließ-Anweisung über DoCmd.Close ... oder über das Betätigen der Schließschaltfläche oben rechts am Fensterrand oder über eine Registerkarte ausgelöst wird, spielt dabei keine Rolle.
Wie lautet Eurer Meinung nach der richtige Code? Also es soll auf jeden Fall ohne Fehlermeldung geschlossen werden und so wenig wie möglich gespeichert werden, weder am Formular noch im DS.
Carl
Hallo,
??
verstehe nur Bahnhof.
Zitates soll auf jeden Fall ohne Fehlermeldung geschlossen werden und so wenig wie möglich gespeichert werden
Kannst Du das mal erklären?
Ich verstehe nicht, was an der Umsetzung jetzt so schwierig ist. :'(
On Error Resume Next 'alle Fehler ohne Meldung übergehen
If Me.Dirty Then Me.Undo
DoCmd.Close acForm, Me.Name, acSaveNo