我有一个表单,用于收集将插入到 Access 2016 中的数据库表中的信息。我的表单有一个多值组合框(称为 cmbContacts),用于从联系人表(ID 和 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 循环不会运行。我不确定为什么它没有注册所选项目
最佳答案
如果组合框选择/填充了 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
请记住,如果仅选择一个值或未选择任何值,则会出现类型不匹配的错误,并且您必须以某种方式处理此问题。
希望这有帮助..
关于sql - 从access vba中的多值组合框中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899116/