Aan lijst toevoegen

Je kent het misschien wel. Via een formulier ben je gegevens aan het invoeren. De waardes van een van de velden voer je via een keuzelijst-met-invoervak in. Achter de keuzelijst zit een tabel met toegestane waardes. Als je een waarde wilt kiezen realiseer je je dat die nog niet in de tabel zit. Het zou dan makkelijk zijn als je zonder eerst naar een ander formulier te hoeven gaan, de ontbrekende waarde kan toevoegen. Dit is te regelen via een gebeurtenis 'bij niet in lijst' (NotInList) op de betreffende keuzelijst-met-invoervak.

Ik heb een voorbeeldje gemaakt van een database waarin je gegevens over (huis)dieren vastlegt. Van een dier kan je onder andere het soort vastleggen. De soorten staan in een tabel. Op het formulier waarmee je de gegevens van een dier vastlegt staat een keuzelijst-met-invoervak voor het soort. Bij die keuzelijst heb ik een gebeurtenis 'bij niet in lijst' gemaakt die er zo uitziet:

Private Sub SoortDier_NotInList(NewData As String, Response As Integer)
If MsgBox("Deze soort bestaat niet." & vbLf & vbLf & "Toevoegen?", vbYesNo, "Onbekend") = vbYes Then
   Response = acDataErrAdded
   DoCmd.RunSQL "INSERT INTO SoortDier(SoortDier) VALUES('" & NewData & "')"
Else
   Response = acDataErrContinue
   Me.SoortDier.Undo
End If
End Sub

Als je nu bij het soort een niet bestaande waarde ingeeft, verschijnt de vraag of je die toe wilt voegen (aan de tabel 'SoortDier' in dit geval). Zo ja, dan wordt dat via de SQL-opdracht (INSERT) meteen gedaan. Merk op dat de variabele NewData de (nog niet bestaande) waarde bevat die je intikte in de keuzelijst.
Beantwoord je de vraag met 'nee', bijvoorbeeld omdat je een tikfout maakte en helemaal niet de bedoeling had een nieuwe waarde toe te voegen, dan gebeurt er niets. De keuzelijst-met-invoervak wordt leeg gemaakt (met Undo) en je kan alsnog een bestaande waarde kiezen.

Klik hier om de voorbeelddatabase te downloaden.