从访问 vba 中的多值组合框中获取值

Posted

技术标签:

【中文标题】从访问 vba 中的多值组合框中获取值【英文标题】:Get values from a multi-value combo box in access vba 【发布时间】:2016-04-27 19:24:27 【问题描述】:

我有一个表单,用于收集将插入到 Access 2016 中的数据库表中的信息。我的表单有一个多值组合框(称为 cmbContacts),它从联系人表(ID 和姓名)。用户可以从组合框中选择 0 个或多个联系人。当用户点击提交按钮时,button_click事件触发VBA代码格式化信息并插入到表格中。

我需要做的是从组合框中获取每个选定联系人的 ID。

这是我目前所拥有的:

If Me.cmbContacts.ItemsSelected.Count > 0 Then 'Only run code if there are contacts selected'
    'Select the most recently added entry (added right before this if statement)'
    Dim rs As DAO.Recordset, Max As Integer
    SQL = "SELECT MAX(ID) FROM Breweries"
    Set rs = CurrentDb.OpenRecordset(SQL)
    Max = rs.Fields(0)
    'Insert each selected Contact ID into Breweries.[Contact Names].Value'
    Dim itm As Variant
    For Each itm In Me.cmbContacts.ItemsSelected
        SQL = "INSERT INTO Breweries ([Contact Names].[Value]) VALUES (" + itm + ") WHERE ID=" + Max
        CurrentDb.Execute (SQL)
    Next itm
End If

一些问题:

Me.cmbContacts.ItemsSelected.Count 始终等于 0,无论在组合框中选择了多少项 因为 cmbContacts.ItemsSelected 不包含所选项目,所以 for 循环不会运行。我不知道为什么它没有注册所选项目

【问题讨论】:

我不太清楚您为什么要使用 Max。您不需要 SQL 语句中的 Where 部分。 SQL = "插入啤酒厂 ([联系人姓名].[值]) VALUES (" + itm + ") "。为什么要标记一个以 txt 作为后缀指向文本框的组合框? 我确实需要 Max - 它为我提供了最近添加到 Breweries Table 中的条目的 ID。然后,我将值添加到具有该 ID 的实体的“联系人姓名”字段中。我可以更新我的代码,以便 prefix 更好地与对象对齐 多选组合框在 MSA16 中必须是新的。还是您使用的是列表框? 不,我使用的是多选组合框,就像这张图片的左侧codeproject.com/KB/silverlight/MultiSelComboBox/image001.png 我认为该控件适用于网页 - 您在 Access 表单上实际使用的是哪个控件? 【参考方案1】:

如果一个组合框选择/填充了超过 1 个项目,那么您可以使用 Ubound() 找出有多少。

IF UBound(Me.cmbContacts.OldValue) > 0
    For i = LBound(Me.cmbContacts.OldValue) To UBound(Me.cmbContacts.OldValue)
       SQL = "INSERT INTO Breweries ([Contact Names].[Value]) VALUES (" + Me.cmbContacts.OldValue(i) + ") WHERE ID=" + Max
        CurrentDb.Execute (SQL)
    Next i
END IF

请记住,如果只选择了一个值或未选择任何值,则会出现类型不匹配的错误,并且您必须以某种方式处理此问题。

希望这会有所帮助..

【讨论】:

以上是关于从访问 vba 中的多值组合框中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 ms access vba 中的多值组合框?

访问 VBA - 使用组合框(多值字段)时类型不匹配

使用多值控制源隐藏组合框中的值

从组合框中访问 VBA 随机值

如何在 MS Access 2010 中使用 VBA 选择多值组合框的值?

访问组合框值