Die Funktion zum Hinzufügen von Werten zur Datensatzherkunft eines Kombinationsfeldes braucht man in fast jeder Datenbankanwendung. Mal eben eine neue Kategorie anlegen oder eine neue Abteilung Kein Problem, wenn Sie pro Kombinationsfeld die richtige Ereignisprozedur programmiert haben. Aber warum sollte man diese eigentlich immer wieder neu programmieren Schließlich gibt es in einer solchen Prozedur doch nur wenige flexible Parameter. Schauen Sie sich an, wie Sie mit einer einfachen Klasse und wenigen Codezeilen ein wiederverwendbares Element zaubern.
Wenn Sie ein Kombinationsfeld verwenden, um damit die Daten einer Lookup-Tabelle zur Auswahl durch den Benutzer bereitzustellen, brauchen Sie kein eigenes Formular, um etwa eine neue Kategorie oder Abteilung zu dieser Tabelle hinzuzufügen. Es reichen dann die folgenden Zeilen Code aus – angelegt in der Prozedur, die beim Hinzufügen eines noch nicht vorhandenen Wertes durch das Ereignis Bei nicht in Liste ausgelöst wird:
Private Sub LieferantID_NotInList(NewData As String, Response As Integer)
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("tblLieferanten", dbOpenDynaset)
With rst
.AddNew
!Firma = NewData
.Update
End With
Response = acDataErrAdded
rst.Close
Set rst = Nothing
Set db = Nothing
End Sub
Gegebenenfalls fügen Sie an geeigneter Stelle noch eine MsgBox-Anweisung ein. Diese fragt, ob der neue Wert in die Datensatzherkunft des Kombinationsfeldes eingefügt werden soll (s. Bild 1):

Bild 1: Rückfrage beim Anlegen eines neuen Datensatzes in einer Lookup-Tabelle direkt über das Kombinationsfeld
If MsgBox("Soll der Wert ''" & NewData & "'' zur Liste hinzugefügt werden", vbYesNo) = vbYes Then
''Datensatz anlegen
Else
Me.Undo
Response = acDataErrContinue
End If
Ist das nicht der Fall, wird die Eingabe verworfen und mit Response = acDataErrContinue die sonst erscheinende Fehlermeldung unterdrückt. Diesen Code müssen Sie für jedes Kombinationsfeld, das die Eingabe neuer Einträge und deren Speicherung in der zugrunde liegenden Tabelle erlauben soll, hinterlegen – und Sie müssen jedesmal die entsprechenden Elemente wie etwa den Namen der Zieltabelle und des Zielfeldes austauschen. Davon abgesehen legen Sie grundsätzlich immer den gleichen Code an – nur diese beiden Werte ändern sich.
Das lässt sich mit einem Klassenmodul ändern. Den Inhalt dieses Klassenmoduls zeigt Listing 1.
Listing 1: Diese Klasse liefert die Funktion zum Hinzufügen neuer Einträge zum Kombinationsfeld.
Dim WithEvents m_Combobox As ComboBox
Dim m_Field As String
Dim m_Rowsource As String
Dim m_Message As String
Public Property Set ComboBox(cbo As ComboBox)
Set m_Combobox = cbo
With m_Combobox
.OnNotInList = "[Event Procedure]"
End With
End Property
Public Property Let Field(str As String)
m_Field = str
End Property
Public Property Let RowSource(str As String)
m_Rowsource = str
End Property
Public Property Let Message(str As String)
m_Message = str
End Property
Private Sub m_Combobox_NotInList(NewData As String, Response As Integer)
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strMessage As String
Set db = CurrentDb
If Len(m_Message) > 0 Then
strMessage = Replace(m_Message, "[Value]", NewData)
If MsgBox(strMessage, vbYesNo + vbExclamation) = vbNo Then
Response = acDataErrContinue
Exit Sub
End If
End If
If Len(m_Rowsource) = 0 Then
m_Rowsource = m_Combobox.RowSource
End If
If Len(m_Field) = 0 Then
m_Field = m_Combobox.Recordset.Fields(1).Name
End If
Set rst = db.OpenRecordset(m_Rowsource, dbOpenDynaset)
With rst
.AddNew
.Fields(m_Field) = NewData
.Update
End With
Response = acDataErrAdded
Set db = Nothing
End Sub
Klasse clsComboboxAddItem nutzen
Doch zunächst zur Funktionsweise dieser Klasse: Um sie zu aktivieren, fügen Sie diese zunächst zu der Datenbank hinzu, die Sie damit ausstatten möchten. Dann legen Sie im Klassenmodul des Formulars folgende Variablendeklaration an:
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →