如何过滤 3 个文本框,然后在 MS Access VBA 中根据它们运行报告

Posted

技术标签:

【中文标题】如何过滤 3 个文本框,然后在 MS Access VBA 中根据它们运行报告【英文标题】:How to filter 3 text boxes and then run a report according to them in MS Access VBA 【发布时间】:2021-04-13 08:30:41 【问题描述】:

我有 3 个组合框:

    公司 - cboCOMP - tblCOMPANY 类别 - cboCAT - tblCATEGORY 机队编号 - cboFLT - tblFLEET_NO

然后通过 cboCOMP 使用 tblFLEET_SETUP 的行源对这些 (1&2) 进行排序(标准) 我已经设置了每个组合框,以便它们相互过滤,但只设法根据 cboCOMP 弄清楚如何执行此操作,只要它选择了一个值。

基本上,我希望组合框(1,2 和 3)在下拉列表中显示它们各自的完整选项列表,即使 cboCOMP 没有选择值,但我希望组合框根据每个选项进行过滤相应的单个组合框。这有可能,我该怎么做?

一旦我选择了我想要过滤的值,我将单击运行报告,但每次我执行唯一的组合框时,都会在我为 cboFLT 选择一个值时出现运行报告的错误。如果我将 cboFLT 留空但在其他 2 个组合框中输入一个值,则报告运行良好。 这是我为此使用的 vba 代码……

Private Sub btnRUN_Click()

Dim vcomp As String
Dim vcat As String
Dim vflt As String
Dim filter As String
        
    If Me.cboCOMP.Value <> "" Then
        vcomp = "'" & Me.cboCOMP.Value & "'"
        ' MsgBox vcomp
                
            filter = "COMPANY =" & vcomp & ""
            ' MsgBox filter
    End If
    
'NEW IF STATEMENT
            
    If Me.cboCAT.Value <> "" Then
        vcat = "'" & Me.cboCAT.Value & "'"
                
            If filter <> "" Then
                filter = filter & " and "
                        
                ' MsgBox filter
            End If
                    
        filter = filter & "CATEGORY =" & vcat & ""
        ' MsgBox filter
                
    End If
    
'NEW IF STATEMENT
             
    If Me.cboFLT.Value <> "" Then
        vflt = "'" & Me.cboFLT.Value & "'"
        
            If filter <> "" Then
                filter = filter & " and "
                
                ' MsgBox filter
            End If
            
        filter = filter & "FLEET NO =" & vflt & ""
        ' MsgBox filter
        
    End If
    
    DoCmd.OpenReport "rptQuick_Fuel_Report", acViewPreview, , filter
    DoCmd.Close acForm, "Quick Fuel Lookup", acSaveNo
    
End Sub

错误代码是“

运行时错误“3705”:查询中的语法错误(缺少运算符) 表达式 'COMPANY = 'JB' 和 CATEGORY = 'SOAP' 和 FLEET NO = 'Q 16 英寸。

当我点击调试时,代码中的错误行是:DoCmd.OpenReport "rptQuick_Fuel_Report", acViewPreview, , filter

【问题讨论】:

字段 FLEET NO 有一个空格。带有空格或标点符号/特殊字符的对象名称必须用 [ ] 括起来:[FLEET NO]。建议不要在命名约定中使用这些功能。 另外,全大写更难阅读。更好的是 tblCompany。表名也习惯使用复数:tblCompanies、tblCategories 等。 天啊!!!我觉得自己像个傻瓜,我真的不敢相信只是在 FLEET NO 中添加 [ ] 就可以使报告生效!!!非常感谢,你不知道我有多感激!!! 关于您对复数和所有大写字母的其他评论,谢谢您,我现在正在这样做,并且在引用和区分时似乎更容易一些,所以再次感谢您 请大家把答案放在答案表格中并标记这个问题已回答。我只是浪费时间阅读所有这些内容。 【参考方案1】:

字段 FLEET NO 有一个空格。带有空格或标点符号/特殊字符的对象名称必须用 [ ] 括起来:[FLEET NO]。建议不要在命名约定中使用这些功能。 – 昨天 6 月 7 日

【讨论】:

以上是关于如何过滤 3 个文本框,然后在 MS Access VBA 中根据它们运行报告的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2013 - 根据文本框中的值过滤列表框中的值

使用宏过滤带有组合框的表单 - MS Access

MS Access 表单中的文本框不适用于 1 个用户

MS Access:如何使此文本框根据查询自动填充值?

如何使用多个组合框过滤 MS Access 中的数据?

MS Access:如何将表单的文本框与查询绑定?