更新:3/20/2019在子线程对话(下面)之后,我重命名了ListBox。 ItemsSelected属性WORKS。值仍然在代码中返回NULL
这是我第一次在Access中处理多选列表。我有一个包含下拉菜单,复选框和列表框的报告表单。列表框包含近70个项目 - 我们称之为“城市”。
ListBox允许多个选择。在VBA中,我将从表单上的其他控件中获取每个参数,以创建一个巨大的WHERE条件来为我的报表提供信息。
问题是Access不会读取从ListBox中选择的值。当我单步执行该行代码时,该值为NULL。
至今:
Dim s As Variant
s = Me.City.Value & ""
这是我知道错误转向的地方,但是,之前没有处理过多选ListBox,我不知道获取值的语法。
下一步:检查列表“s”中是否选择了值:
If s <> "" Then
检查当前WHERE条件中的其他参数。如果不存在,那么
If c.WhereCondition = "" Then
c.WhereCondition =
通过将List值(字符串)与Source表中的等效字段的Yes / No值进行比较来设置WHERE Condition。
我必须将List值与表中的70个字段进行比较 - 以拉出那些匹配的记录。
不,没有一个领域 - 比如城市,有70个可能的值。相反,70个可能的城市中的每一个都有自己的是/否字段。我继承了这个DB。这就是它的构建方式。
目前,我的尝试看起来像:
c.WhereCondition = "( City1 = -1 OR City2 = -1 OR City3 = -1 OR .....)
`如果当前WHERE子句中有参数,则将List与Source表中的值进行比较,并将AND APPEND结果与带有“AND”的WHERE条件进行比较
ELSE
c.WhereCondition = c.WhereCondition & " AND (City1 = -1 OR City2 = -1, OR ...)
End If
End If
我希望我能够很好地解释这一点。第一个问题是读取值。如果没有这个,我不知道我的比较尝试是对还是错。
这需要很多面包屑才能让我来到这里!
解:
Dim s As Variant
Dim i As Integer
Dim ctl As Control
Set ctl = Me.Counties
If ctl.ItemsSelected.Count <> 0 Then
For Each s In ctl.ItemsSelected
t.WhereCondition = ctl.ItemData(s) & " = -1"
Next s
End If
它汇编。它运行。手指交叉以获得数据准确性。
谢谢!