我有一份报告,从名为“志愿者”的表中选择。整个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子句的其他参数编译这些选择,否则这会产生很大的效果。这个选择没有足够的parens,它没有正确过滤记录。
我尝试了几种解决方案 - 最接近的是:
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,保持尾随括号。
有没有办法做到这一点?
(我讨厌发布下午(美国东部时间)的问题,因为直到明天我才能跟进,但是,我一整天都在绞尽脑汁)