ACCESS 2007 - 日期之间的表单/子表单过滤

时间:2015-06-11 21:15:49

标签: vba date ms-access filter

在ACCESS 2007中,我有一个主表单,其中包含两个名为cmbStavOdcmbStavK的未绑定组合框,两者都格式化为短日期。 我有一个名为frm_qryNaklady_subform的子表单,它基于一个名为datNakladDatum(文本框名称为datNakladDatum)的字段的查询,格式为短日期。 我希望允许用户输入日期范围,并将子表单过滤为仅显示在主表单框中输入的日期范围的记录。 我在AfterUpdate事件中使用VBA代码,如:

Dim datRokMesiacOd As Date
Dim datRokMesiacDo As Date
Dim strFilterNaklady As String

datRokMesiacOd = DateSerial(Year(cmbStavOd), Month(cmbStavOd), 1)   'begin Date
datRokMesiacDo = DateSerial(Year(cmbStavK), Month(cmbStavK) + 1, 1) - 1 'end Date
strFilterNaklady = "[datNakladDatum] Between #" & datRokMesiacOd & "# And #" & datRokMesiacDo & "#"
With Me.frm_qryNaklady_subform.Form
    .Filter = strFilterNaklady
    .FilterOn = True
End With

例如,strFilterNaklady的结果如下所示:"[datNakladDatum] Between #1. 1. 2015# And #31. 12. 2015#"。 通过调试代码,我在语句:

收到错误消息
With Me.frm_qryNaklady_subform.Form
.Filter = strFilterNaklady
.FilterOn = True
End With
  

错误3709 - 在任何记录中都找不到搜索键。

但基础查询包含大量符合输入日期范围的记录。

我整天都在使用日期过滤语法,但没有成功。

你看到我出错了吗?

1 个答案:

答案 0 :(得分:0)

您需要正确的日期格式:

strFilterNaklady = "[datNakladDatum] Between #" & Format(datRokMesiacOd, "yyyy\/mm\/dd") & "# And #" & Format(datRokMesiacDo, "yyyy\/mm\/dd") & "#"

此外,这可以简化为:

datRokMesiacDo = DateSerial(Year(cmbStavK), Month(cmbStavK) + 1, 0) 'end Date