根据表单上的两个日期值(如果存在)打开报表

时间:2019-05-28 15:18:38

标签: vba ms-access

我有一个表单(frmReports),其中有两个未绑定的文本框,用于输入日期。一个是FROM,一个是TO。

这些用于过滤出报告(rptAllCommissions)。如果文本框中有值,则将进行过滤。如果没有,或者有一个日期,而不是两个日期,它将创建一个WHERE语句来打开报告。这是代码:

Private Sub cmdCommissions_Click()
    Dim strDateFrom As String
    Dim strDateTo As String
    Dim strWhere As String

    Const strcJetDate = "\#mm\/dd\/yyyy\#"

    strDateFrom = "[ClosingDate]"

    If IsDate(Me.txtFrom) Then
        strWhere = "(" & strDateFrom & " >=" & Format(Me.txtFrom, strcJetDate) & ")"
    End If
    If IsDate(Me.txtTo) Then

        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If

        strWhere = strWhere & "(" & strDateFrom & " <= " & Format(Me.txtTo + 1, strcJetDate) & ")"
    End If

    If CurrentProject.AllReports("rptAllCommissions").IsLoaded Then
        DoCmd.Close acReport, "rptAllCommissions"
    End If
    Debug.Print strWhere

    DoCmd.OpenReport "rptAllCommissions", acViewReport, strWhere

Exit_Handler:
    Exit Sub

Err_Handler:
    If Err.Number <> 2501 Then
        MsgBox "Error" & Err.Number & ": " & Err.Description, vbExclamation, "Cannot Open Report!"
    End If
    Resume Exit_Handler

End Sub

我遇到的问题是无论我尝试什么,该报告都不会根据上述例程创建的WHERE语句来过滤记录。尝试调试,它输出:

如果输入了两个日期:([ClosingDate] >=#04/01/2019#) AND ([ClosingDate] <= #05/25/2019#)
如果输入了一个日期:([ClosingDate] >=#05/13/2019#)

这对我来说似乎是正确的,但不是过滤。我到底在做什么错了?

编辑:我应该赞扬原始例程的编写者,但我终生无法找到我的原始例程。抱歉!但是最初由谁编写例程,谢谢!

1 个答案:

答案 0 :(得分:1)

whereCondition应该是OpenReport方法中的第四个参数。您可以在FilterName参数的位置找到它。

OpenReport