从访问 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 中的多值组合框中获取值的主要内容,如果未能解决你的问题,请参考以下文章