首页 > 解决方案 > 使用列表框 Microsoft Access 多选

问题描述

我正在尝试使用列表框过滤拆分表单,但我不断收到错误“3075”。

我使用了调试工具,我得到了:

strSearch = "52185A, 515674B"

任务 =“从 tOrder 中选择 * ([OrderID] in (52185A,515674B))”

我很确定我错过了一些引文,但我似乎无法弄清楚在哪里。它们都是短文本格式。

Option Compare Database

Private Sub cmdSearch_Click() 
Dim varltem As Variant 
Dim strSearch  As String 
Dim Task As String

For Each varltem In Me!LstMatricule.ItemsSelected 
   strSearch = strSearch & "," & Me!LstMatricule.ItemData(varltem) 
Next varltem
If Len(strSearch) = 0 Then 
   Task = "select * from tOrder" 
Else 
   strSearch = Right(strSearch, Len(strSearch) - 1) 
   Task = "select * from tOrder where ((OrderID] in (" & strSearch & "))" 
End If 
DoCmd.ApplyFilter Task 

End Sub 

标签: vbalistms-accessfilter

解决方案


strSearch = strSearch & ",'" & Me!LstMatricule.ItemData(varltem) & "'"

很难看到,但基本上我在每个 varItem 周围添加了单引号。您希望结果如下所示:

strSearch = "'52185A', '515674B'"

我个人会这样做:

strSearch = strSearch & IIf(Len(strSearch) = 0, "", ",") & "'" & Me!LstMatricule.ItemData(varltem) & "'"

如果您要添加超过 2-3 个 ID,则计算成本会稍高一些,但比稍后在开头删除起始逗号更干净。


推荐阅读