从组合框中选择项目

问题描述 投票:0回答:3

我有 Access 2010 表单,其中有一个组合框

cmbSubTopic
,其中列出了两列(
SubTopicID
SubTopic
)。组合框绑定到包含
SubTopicID
的字段。组合框中的
SubTopicID
列被隐藏,仅显示
SubTopic
。当用户从下拉列表中选择
SubTopic
时,相应的
SubTopicID
就会存储在表中。我为表单的加载事件编写了一些 VBA 代码,以在表中查找
SubTopicID
,并在组合框中选择相应的
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)

这会选择组合框中的项目,但也会将 I 的值写入我不想要的表的

ID
字段中。

vba ms-access combobox
3个回答
12
投票

假设组合的第一列

SubTopicID
也是其“绑定列”属性,则该列的值将用作组合的
.Value
属性。这意味着您只需为
.Value
分配一个值即可选择匹配的组合行。

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

这种方法很简单,但我不确定它是否适合您的情况。我们对您的

rsST
记录集一无所知 --- 我推测记录集当前行中的
SubTopicID
字段是您想要在组合中选择的值。如果我误解了这一点,我们需要找出不同的东西。

如果组合绑定到表单记录源中的字段,此建议也会更改存储的值。如果您不想这样做,请“取消绑定”组合 --- 换句话说,将其 Control Source 属性留空。


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

0
投票

您可以将 ItemData(idx) 分配给您的组合框:

     'Change the combobox slection to the second item
     '(index starts with zero)

     cmb = cmb.ItemData(1)

请注意,我一直在使用 MS Access 2007。最新版本可能不再允许此分配。

© www.soinside.com 2019 - 2024. All rights reserved.