Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Schließen ohne Fehlermeldung

Begonnen von Carl, Oktober 24, 2017, 20:55:36

⏪ vorheriges - nächstes ⏩

Carl

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 ...


Carl

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

DF6GL

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.


Lachtaube

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.
Grüße von der (⌒▽⌒)

Carl

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

DF6GL

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?

Lachtaube

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
Grüße von der (⌒▽⌒)