Kombinationsfelder automatisch ergänzen

Kombinationsfelder haben den Vorteil, daß man oft benötigte Einträge nicht jedesmal neu eingeben muß, sondern bequem aus einer Liste auswählen kann. Oft ist es jedoch erforderlich, diese Liste zu erweitern.
Dies läßt sich mit einer Ereignisprozedur erledigen. Um den Tip nachzuvollziehen, benötigen Sie eine Tabelle »Kategorie«, die nur das Feld »Name_Kategorie« enthält. Ein Primärschlüssel ist nicht erforderlich. Die aus dieser Liste übernommenen Werte werden in der dem Formular zugrundeliegenden Tabelle im Feld »Kategorie« abgelegt.
Anschließend erstellen Sie im gewünschten Formular ein Kombinationsfeld, das seine Werte aus der Tabelle »Kategorie« bezieht; dabei hilft Ihnen der Steuerelement-Assistent. Mit einem rechten Klick auf das neue Feld gelangen Sie zu dessen »Eigenschaften«. Legen Sie unter »Daten« fest, daß »Nur Listeneinträge« auf »Ja« steht. Im Register »Ereignis« wählen Sie »Ereignisprozedur« und weisen ihr die abgedruckte Prozedur zu.
Wenn Sie jetzt einen neuen Wert in das Kombinationsfeld eintragen, erscheint eine Dialogbox, die nachfragt, ob die Kategorie hinzugefügt werden soll. Mit »Ja« übernimmt die Prozedur den Eintrag in die Liste der Kategorien.
In einigen Punkten müssen Sie das Listing Ihren Formular- und Feldnamen anpassen. In der Zeile »Set ct = Forms!Eingabemaske!Kategorie« wird etwa davon ausgegangen,
daß der Name des Formulars »Eingabemaske« und der des Feldes »Kategorie« lautet.
Ereignisprozedur für Kombinationsfelder:
Private Sub Kategorie_NotInList(neuer_wert As String, intResponse As Integer)
Dim x As Integer, db As DATABASE, rs As Recordset, ct As Control
'Frage, ob eine neue Kategorie erstellt werden soll
x = MsgBox("Soll eine neue Kategorie hinzugefügt -->
werden?", 36, "Kategorie nicht in Liste")
If x = 6 Then 'Wenn JA...
Set db = CurrentDb()
Set rs = db.OpenRecordset("Kategorie", dbOpenTable)
Set ct = Forms!Eingabemaske!Kategorie 'das Listenfeld
rs.AddNew
rs!Name_Kategorie = neuer_wert
rs.UPDATE
rs.Close
DoCmd.DoMenuItem acFormBar, acEdit, acUndo
intResponse = acDataErrAdded
Else 'Wenn NEIN...
DoCmd.DoMenuItem acFormBar, acEdit, acUndo
intResponse = acDataErrContinue
End If
End Sub
["-->" bedeutet, daß diese Befehlszeile hier nicht endet, sondern in der
nächsten Druckzeile fortgesetzt wird.]