如何在 MS Access VBA 中过滤 3 个文本框,然后 运行 根据它们生成报告
How to filter 3 text boxes and then run a report according to them in MS Access VBA
我有 3 个组合框:
- 公司 - cboCOMP - tblCOMPANY
- 类别 - cboCAT - tblCATEGORY
- 机队编号 - cboFLT - tblFLEET_NO
然后通过 cboCOMP 对这些 (1&2) 进行排序(条件),行源为 tblFLEET_SETUP
我已经设置了每个组合框,以便它们相互过滤,但只设法根据 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
错误代码为“
Run-time error '3705': Syntax error (missing operator) in query
expression 'COMPANY = 'JB' and CATEGORY = 'SOAP' and FLEET NO = 'Q
16''.
当我点击调试时,代码中的错误行是:
DoCmd.OpenReport "rptQuick_Fuel_Report", acViewPreview, , filter
野战舰队编号有 space。带有 space 或 punctuation/special 字符的对象名称必须包含在 [ ]: [FLEET NO] 中。建议不要在命名约定中使用这些功能。 – 昨天 6 月 7 日
我有 3 个组合框:
- 公司 - cboCOMP - tblCOMPANY
- 类别 - cboCAT - tblCATEGORY
- 机队编号 - cboFLT - tblFLEET_NO
然后通过 cboCOMP 对这些 (1&2) 进行排序(条件),行源为 tblFLEET_SETUP 我已经设置了每个组合框,以便它们相互过滤,但只设法根据 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
错误代码为“
Run-time error '3705': Syntax error (missing operator) in query expression 'COMPANY = 'JB' and CATEGORY = 'SOAP' and FLEET NO = 'Q 16''.
当我点击调试时,代码中的错误行是:
DoCmd.OpenReport "rptQuick_Fuel_Report", acViewPreview, , filter
野战舰队编号有 space。带有 space 或 punctuation/special 字符的对象名称必须包含在 [ ]: [FLEET NO] 中。建议不要在命名约定中使用这些功能。 – 昨天 6 月 7 日