Komfortable Dropdown-Listenfelder

Neue Datensätze für das Listenfeld erfassen

Mit diesen Maßnahmen haben Sie nun, bis auf den zusätzlichen Listeneintrag, nur das realisiert, was sich durch Zuweisung einer Tabelle oder Abfrage als Datenquelle auch erreichen ließe. Für den gewünschten Komfort sollten Sie aber dafür sorgen, dass bei Auswahl des Listeneintrags mit dem Wert 0 in der ersten Spalte ein Formular angezeigt wird, über das der Benutzer eine neue Gruppe erfassen kann.

Bild 2: Das Dropdown-Listenfeld mit zusätzlichem Eintrag.
Bild 2: Das Dropdown-Listenfeld mit zusätzlichem Eintrag.

Zu diesem Zweck reicht zunächst ein ganz normales Formular für die Eingabe von Daten in die Tabelle Gruppen, das Sie über den Formularassistenten erstellen können. In das Formular fügen Sie eine Schaltfläche ein, über die der Benutzer das Formular schließen kann. Dazu deaktivieren Sie den Schließen-Button des Fensters, indem Sie die Eigenschaft Schließen-Schaltfläche auf Nein setzen. Im Beispiel heißt dieses Formular frmGruppen und die Schaltfläche bttSchliessen.

Für die Schaltfläche erstellen Sie eine Click-Ereignisprozedur, die das Formular schließt. Innerhalb dieser Ereignisprozedur rufen Sie die Close- Methode des DoCmd-Objekts auf. Für das Formular erzeugen Sie eine Ereignisprozedur für das Close-Ereignis. In dieser speichern Sie den Wert des Feldes ID in der Variablen lngErgebnis (Listing 4).

Private Sub bttSchliessen_Click()
lngDatensatz = 0
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
Private Sub Form_Close()
lngErgebnis = Me.ID.Value
End Sub
Private Sub Form_Open(Cancel As Integer)
'Variable lngDatensatz abfragen, um zu ermitteln,
'welcher Datensatz angezeigt werden soll.
If lngDatensatz = -1 Then
'Neuen Datensatz anzeigen
DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
End If
End Sub

Auch beim Öffnen müssen Sie noch Code ausführen. Da es natürlich auch möglich ist, dass der Benutzer das Formular zur Erfassung der Gruppen separat aufruft, darf natürlich nicht automatisch zu einem neuen Datensatz gesprungen werden. Sie sollten daher prüfen, ob das Formular über das Listenfeld aufgerufen wurde. Das geht am einfachsten, indem Sie den aktuellen Wert des Listenfeldes in der Variablen lngDatensatz speichern. Problematisch ist dies allerdings, weil eine nicht initialisierte numerische Variable auch den Wert 0 bekommt. Somit können Sie nicht unterscheiden, ob die Variable keinen Wert hat oder den Wert 0. Daher wird hier vom Wert des Listeneintrags noch der Wert 1 abgezogen. Das bedeutet dann, dass Sie innerhalb der Open- Ereignisprozedur prüfen müssen, ob der Wert der Variablen -1 ist. In diesem Fall springen Sie zu einem neuen Datensatz.