Я считаю, что основной проблемой является эта строка:
Set rstRecords = db.OpenRecordset("TblPurchases")
Вы устанавливаете набор записей для использования таблицы в качестве ее источника вместо строки SQL. Неважно, какие у вас даты ввода, если вы посмотрите на всю таблицу, она вернет всю таблицу xD.
Что касается нахождения общего количества элементов в результате запроса, возможно, имеет смысл использовать функцию SQL COUNT, например: SELECT COUNT(<Column>) FROM <table> WHERE <criteria>;
Это предоставит вам количество записей данных, предоставленных этим запросом.
Я бы также порекомендовал использовать объект QueryDef для ваших определений SQL, так как он немного чище. Но опять же, это всего лишь рекомендация EG:
Function FindRecordCount(dateFrom As Date, dateTo As Date) As Long
Dim db As DAO.Database
Dim QDF As DAO.QueryDef
Dim rstRecords As DAO.Recordset
Dim SQL As String
SQL = "SELECT COUNT(*) FROM TblPurchase WHERE([Date of Purchase] >= #@dateFrom# AND [Date of Purchase] <= #@dateTo#)"
Set db = CurrentDb
Set QDF = db.QuerDefs(SQL)
QDF.Paramaters("@dateFrom").Value = dateFrom
QDF.Paramaters("@dateTo").Value = dateTo
Set rstRecords = QDF.OpenRecordset("TblPurchases")
If rstRecords.EOF Then
FindRecordCount = 0
Else
rstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
End If
rstRecords.Close
QDF.Close
db.Close
Set rstRecords = Nothing
Set QDF = Nothing
Set db = Nothing
End Function
С наилучшими пожеланиями.