Beitrag aus SmartTools Access Weekly
Nur einen Datensatz anlegen und Formular nach dem Speichern schließen
Access 365 2024 2021 2019 2016 2013 2010
FRAGE Ich möchte erreichen, dass ein Anwender in einem Formular nur einen einzigen neuen Datensatz eingeben kann. Die Eingabe soll über eine Schaltfläche Übernehmen gespeichert und das Formular dann direkt geschlossen werden. Eine Schaltfläche Abbrechen soll das Schließen des Formulars ohne Speicherung der Eingabe ermöglichen. Das Formular darf nicht über das Schließen-Symbol oder auf anderem Wege geschlossen werden; der Anwender muss unbedingt Übernehmen oder Abbrechen anklicken. Wie lässt sich eine solche Anforderung realisieren?
R. Kuhle
ANTWORT Stellen Sie zunächst für das Formular die Eigenschaften "Daten eingeben" auf "Ja" und "Löschen zulassen" auf "Nein" ein. Damit ist sichergestellt, dass das Formular nur zur Eingabe neuer Datensätze verwendet und der aktuelle Datensatz nicht gelöscht werden kann. Die Eigenschaft "Zyklus" muss auf "Aktueller Datensatz" eingestellt werden, damit nach Erreichen des letzten Feldes nicht automatisch zu einem neuen Datensatz gewechselt wird. Außerdem sind noch einige VBA-Ereignisprozeduren einzurichten: Stellen Sie "Beim Anzeigen" auf "[Ereignisprozedur]" ein und rufen Sie über die Schaltfläche mit den drei Punkten den VBA-Editor auf. Hier geben Sie folgende Anweisungen ein:
Private Sub Form_Current()
If Me.NewRecord Then
DoCmd.GoToRecord acActiveDataObject, Me.Name, acFirst
End If
End Sub
Damit erreichen Sie, dass ein neuer Datensatz verworfen und immer der erste, einzige Datensatz angezeigt wird. Deklarieren Sie dann im allgemeinen Teil des Formulars die folgende Variable:
Dim CanClose As Boolean
Diese Variable dient anderen Ereignisprozeduren als Kennzeichen, ob das Formular aktuell geschlossen werden darf oder nicht bzw. wird beim Klicken auf Schaltflächen entsprechend gesetzt. Dazu erstellen Sie Ereignisprozeduren "Beim Entladen" des Formulars und der Schaltflächen Übernehmen und Abbrechen:
Private Sub Form_Unload(Cancel As Integer)
If Not CanClose Then Cancel = True
End Sub
Private Sub btnSave_Click()
DoCmd.RunCommand acCmdSaveRecord
CanClose = True
DoCmd.Close acForm, Me.Name, acSavePrompt
End Sub
Private Sub btnCancel_Click()
Me.Undo
CanClose = True
DoCmd.Close acForm, Me.Name, acSavePrompt
End Sub
Soll das Formular entladen/geschlossen werden, sorgt die Abfrage von "CanClose" dafür, dass es beispielsweise beim Klick auf das Schließen-Symbol durch Setzen von "Cancel = True" unterbunden wird. Erst beim Klick auf eine der Schaltflächen wird "CanClose" auf "True" gesetzt und das Formular kann verlassen werden. Ein Klick auf Übernehmen (btnSave) speichert den Datensatz und schließt das Formular, ein Klick auf Abbrechen nimmt aktuelle Änderungen zurück und schließt dann das Formular.