2013-11-20 20 views
5

Ich habe Access 2010 Formular, das eine ComboBox cmbSubTopic hat, die zwei Spalten (SubTopicID und SubTopic) auflistet. Das Kombinationsfeld ist an ein Feld gebunden, das SubTopicID enthält. Die SubTopicID Spalte in der Combo-Box ist ausgeblendet, es zeigt nur die SubTopic. Wenn der Benutzer eine SubTopic aus dem Dropdown wählt, wird der entsprechende SubTopicID in der Tabelle gespeichert. Ich schrieb einige VBA-Code für das On-Load-Ereignis des Formulars, um die SubTopicID in der Tabelle nachschlagen und die entsprechende SubTopic ist in der ComboBox ausgewählt. Meine aktuellen Code ist so etwas wie folgt aus:VBA: Wie wählt man Artikel aus einer ComboBox

Set rsST = dbs.OpenRecordset(strSqlst) 
For i = 0 To Me.cmbSubTopic.ListCount - 1 
    If Me.cmbSubTopic.Column(0, i) = rsST.Fields("SubTopicID").Value Then 
     Me.cmbSubTopic.SetFocus 
     Me.cmbSubTopic.Selected(i) = True 
     Exit For 
    End If 
Next i 

Dies gibt die Fehlermeldung, dass:

Der eingegebene Text ist kein Element in der Liste

Ich habe auch versucht, diese mit :

Me.cmbSubTopic = Me.cmbSubTopic.Selected(i) 

Dies wählt das Element in der ComboBox, aber es schreibt auch den Wert von I in das ID Feld der Tabelle, die ich nicht will.

+0

Im Allgemeinen haben Sie nichts zu tun für die Combobox, die eine Steuerquelle hat, da ihr Wert das der Underlyng-Tabelle ist. – jacouh

+0

Gibt es eine Möglichkeit, ich kann das Einfügen der Daten in die Tabelle auf dem OnLoad-Ereignis des Formulars blockieren und dann Einfügen in das AfterUpdate-Ereignis der Combobox zulassen. – ksagar

Antwort

8

Angenommen, die erste Spalte der Combo, SubTopicID, ist auch die Eigenschaft "gebundene Spalte" der Combo, die als .Value Eigenschaft der Spalte verwendet wird. Das bedeutet, dass Sie nur einen Wert zuweisen müssen, um die passende Kombinationszeile auszuwählen.

Me.cmbSubTopic.Value = rsST.Fields("SubTopicID").Value 

Dieser Ansatz ist einfach, aber ich bin unsicher, ob es die richtige Lösung für Ihre Situation ist. Wir wissen nichts über Ihre rsST Recordset --- Ich vermutete die SubTopicID Feld in der aktuellen Zeile des Recordsets ist der Wert, den Sie in der Combo ausgewählt haben. Wenn ich diesen Punkt missverstanden habe, müssen wir etwas anderes herausfinden.

Wenn das Kombinationsfeld an ein Feld in der Datensatzquelle des Formulars gebunden ist, ändert dieser Vorschlag auch den gespeicherten Wert. Wenn Sie das nicht wollen, "entkoppeln" Sie die Combo --- mit anderen Worten, machen Sie ihre Control Source Eigenschaft leer.

Verwandte Themen