У меня есть форма (frmReports) с двумя несвязанными текстовыми полями, которые используются для ввода дат. Один ОТ, другой ДО.
Они используются для фильтрации отчета (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#)
Мне это кажется правильным, но это не фильтрация. Какого черта я делаю неправильно?
Обновлено: Я должен отдать должное человеку, который написал оригинальную программу, но я не могу найти, где я ее взял. Извиняюсь! Но кто бы это ни был, кто изначально написал программу, СПАСИБО!





WhereCondition должен быть 4-м аргументом в методе OpenReport. У вас есть это в месте аргумента FilterName.
Если бы все наши проблемы были такими простыми!