我有Access 2010表单,其中有一个ComboBox cmbSubTopic
,其中列出了两列(SubTopicID
和SubTopic
)。组合框绑定到包含SubTopicID
的字段。组合框中的SubTopicID
列已隐藏,仅显示SubTopic
。当用户从下拉列表中选择SubTopic
时,相应的SubTopicID
将存储在表格中。我为表单的on load事件编写了一些VBA代码,以便在表中查找SubTopicID
,并在ComboBox中选择相应的SubTopic
。我目前的代码是这样的:
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
这会出错:
您输入的文字不是列表中的项目
我也试过用这个:
Me.cmbSubTopic = Me.cmbSubTopic.Selected(i)
这会选择ComboBox中的项目,但它也会将I的值写入表格中我不想要的ID
字段。
答案 0 :(得分:9)
假设组合的第一列SubTopicID
也是组合的“绑定列”属性,它将用作列的.Value
属性。这意味着您只需要为.Value
分配一个值,以便选择匹配的组合行。
Me.cmbSubTopic.Value = rsST.Fields("SubTopicID").Value
这种方法很简单,但我不确定它是否适合您的情况。我们对您的rsST
记录集一无所知---我假设记录集当前行中的SubTopicID
字段是您想要在组合中选择的值。如果我误解了这一点,我们需要找出不同的东西。
如果组合绑定到表单记录源中的字段,则此建议也会更改存储的值。如果你不想那样,“取消绑定”组合 - 换句话说,将其控制源属性设为空白。
答案 1 :(得分:0)
这里有2个子-一个用于传递文本(SubTopic),第二个用于ID(SubTopicId):
Public Sub SelectComboBoxItemByText(cmb As ComboBox, Value As String)
On Error GoTo ErrHandler_
Dim i As Integer
For i = 0 To cmb.ListCount - 1
If cmb.Column(1, i) = Value Then
cmb.SetFocus
cmb.Selected(i) = True
cmb.Text = Value
Exit For
End If
Next i
End Sub
ExitProc_:
DoCmd.Hourglass False
Exit Sub
ErrHandler_:
DoCmd.Hourglass False
Call LogError(Err, "basTools", "SelectComboBoxItemByText")
Resume ExitProc_
Resume ' use for debugging
End Sub
Public Sub SelectComboBoxItemById(cmb As ComboBox, Value As Integer)
On Error GoTo ErrHandler_
Dim i As Integer
For i = 0 To cmb.ListCount - 1
If cmb.Column(0, i) = Value Then
cmb.SetFocus
cmb.Selected(i) = True
cmb = Value
Exit For
End If
Next i
ExitProc_:
DoCmd.Hourglass False
Exit Sub
ErrHandler_:
DoCmd.Hourglass False
Call LogError(Err, "basTools", "SelectComboBoxItemById")
Resume ExitProc_
Resume ' use for debugging
End Sub