【发布时间】:2019-04-18 18:24:52
【问题描述】:
我有一份报告,从名为“志愿者”的表格中选择。整个 WHERE 子句在运行时在 VBA 中构建,基于表单上选择的以下参数
志愿者类型:2 个复选框之一
区域:1 个下拉列表 - 但在 VBA 中,每个区域可以是任意数量的办事处
位置:4选项多选
县:70个选项多选
我的报表必须在运行时编译所有这些动态变量。
我认为我的最后一个问题 - 关于县 - 实际上不起作用,这就是我现在所处的位置。
在“志愿者”表中,70 个县中的每一个县都有自己的布尔字段。
ReportFrom 将县表示为字符串。为了在 OR 语句中循环最多 70 个选择,以根据 True/False 评估 String,提供了以下解决方案:
Dim s As Variant
Dim ctl As Control
Dim t As TCondition
Set ctl = Me.Counties
If ctl.ItemsSelected.Count <> 0 Then
For Each s In ctl.ItemsSelected
t.WhereCondition = t.whereCondition & ctl.ItemData(s) & " = -1 OR"
Next s
' trim trailing " OR"
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition)-3)
End If
除了使用 WHERE 子句的其他参数编译这些选择之外,这非常有效。此选择周围没有足够的括号,它没有正确过滤记录。
我尝试了几种解决方案 - 其中最接近的是:
If ctl.ItemsSelected.Count <> 0 Then
For Each s In ctl.ItemsSelected
t.WhereCondition = t.WhereCondition & "((" & ctl.ItemData(s) & ") = -1) OR )"
Next s
t.WhereCondition = Left(t.WhereCondition, Len(t.WhereCondition) - 4)
End If
问题是修剪 4 个字符会删除我 需要 的 RParen,以便此语句正确过滤报告。仅修剪 3 会留下尾随的“O”。
我需要以某种方式仅删除结尾的 OR,保留结尾的括号。
有没有办法做到这一点?
(我讨厌发布下午 (EST) 的问题,因为我要到明天才能跟进,但是,我整天都在绞尽脑汁)
【问题讨论】: