运行时错误3075

时间:2015-04-28 20:00:41

标签: vba ms-access access-vba

我确实希望在VBA中创建一个多重过滤器功能,以便从主窗体上的控件中对子窗体进行排序。

这是我的代码

{{1}}

但是我在查询表达式中不断收到运行时错误3075(语法错误(缺少运算符)。

我可以在错误消息中看到我的变量。

我知道我的查询表达式格式不正确。但我无法理解。

1 个答案:

答案 0 :(得分:2)

好吧,我觉得有必要回答这个问题,因为看起来你从根本上说没有得到什么,或者不止一件事,而且我没有接受我的评论。

我不知道你是不是只是在不理解它的情况下复制和粘贴代码,或者是如此匆忙,以至于你没有花时间去理解代码。

让我们从:

开始
  

这段代码lngLen = Len(strWhere) - 5 If lngLen <= 0 Then MsgBox "No criteria", vbInformation, "Nothing to do." Else应该摆脱那条尾巴

不,不是。

lngLen = Len(strWhere) - 5
If lngLen <= 0 Then
    MsgBox "No criteria", vbInformation, "Nothing to do."
Else
    Debug.Print strWhere

    Me.Sub_Desi_Schedule.Form.Filter = strWhere
    Me.Sub_Desi_Schedule.Form.FilterOn = True
End If

做两件事。它将lngLen设置为等于strWhere变量的长度减去5.然后检查长度是否小于或等于0.

如果您的strWhere声明是......

 ([PNum] = 27) AND 

...你要将lngLen设为13。

由于13不小于或等于零,我们将进入您的ELSE语句,并设置过滤器。

Me.Sub_Desi_Schedule.Form.Filter = strWhere

哪个成为

Me.Sub_Desi_Schedule.Form.Filter = "([PNum] = 27) AND "

请参阅?您仍然得到了结尾AND,因为您永远不会更新strWhere变量。

  

以下是我在两种情况下尝试Me.Sub_Desi_Schedule.Form.Filter = Len(strWhere) - 5Me.Sub_Desi_Schedule.Form.Filter = lngLen的情况,错误消失了。但是没有应用过滤器。

所以现在你正在做

Me.Sub_Desi_Schedule.Form.Filter = Len(strWhere) - 5`

相当于

Me.Sub_Desi_Schedule.Form.Filter = 13

这没有任何成就。您将过滤器设置为等于变量的长度,而不是实际的strWhere变量。如果在代码中添加任何断点,这应该是显而易见的。

我建议使用LEFT修剪字符串,如下所示:

strWhere = LEFT(strWhere, lngLen)

这就是它的全部内容。