Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

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.