Kombinationsfeld VBA Not in List

Umgebung

Sinn der Übung

Beim Erfassen einer Farbe welche nicht im Dropdownfeld enthalten ist, soll der Anwender gefragt werden, ob die Farbe zu erfassen ist. Im „Ja-Fall“ soll Access den bereits ins Drop Down Feld eingegebenen Farbnamen in die Tabelle tblFarbe speichern und den neuen Wert in der Tabelle tblProdukt speichern.

Beispiel ohne Code

Der Anwender versucht eine Farbe zu erfassen welche in der tblFarbe noch nicht existiert. Es erscheint eine Fehlermeldung.

Code

Private Sub FarbeNr_NotInList(vFarbe As String, Response As Integer)
Response = acDataErrContinue 'Keine Meldung an den Anwender
Me.ActiveControl.Undo 'Fehlerhafte Eingabe rückgängig machen

Dim vText As String
Dim vTite As String

vText = "Die gewählte Farbe <<" & vFarbe & ">> ist nicht erfasst. Soll sie jetzt erfasst werden?"
vTite = "Neue Farbe erfassen"
'Den Anwender fragen ob die Farbe erfasst werden soll. Je nach Antwort verzweigen
If MsgBox(vText, vbQuestion + vbYesNo, vTite) = vbYes Then
Dim db As Database 'Eine Variabel als Datenbank dimensionieren
Dim rs As Recordset 'Eine Variabel als Tabelle dimensionieren
Dim vFarbZähler As Long 'Eine Zahlenvariabel dimensionieren
Set db = CurrentDb() 'Der DB Variabel die aktuelle Datenbank zuweisen
Set rs = db.openrecordset("T-Farben", DB_OPEN_DYNASET) 'Der Tabelle die Farbtabelle zuweisen

rs.AddNew 'Zu neuem Datensatz gehen
rs!Farbe = vFarbe 'Neue Farbe eingeben
vFarbZähler = rs!FarbZähler 'Farbzähler (Autowert) merken
rs.Update 'Datensatz speichern
rs.Close 'Recordset schliessen
db.Close 'Datenbank schliessen

FarbeNr.Requery 'Dropdownfeld neu abfragen
FarbeNr.Value = vFarbZähler 'Neue erfasster Wert in Dropdownfeld eingeben
End If
End Sub

Versionskonflikte

Je nach verwendeter Access- und Windows-Version sind unterschiedliche Versionen der DAO-Bibliothek (DLL-Dateien) installiert. Obiger Code funktioniert mit “Microsoft DAO v3.6“. Sollte Trotz dieser Angabe (Menü ExtrasVerweise) der Code in der Zeile „OpenRecordset“ einen Fehler produzieren, ist die Dimensionierung mit „Dim db As DAO.Database“ und „Dim rs As DAO.Recordset" vor zu nehmen. Dies verhindert die Verwendung des gleichnamigen Befehles aus der ODBC-Bibliothek.

Ihre Aufgabe