MS Access日期范围过滤仅显示某个范围

时间:2015-06-25 04:21:14

标签: forms vba ms-access access-vba

我有一个带有子表单(连续表单)的表单,我想在其上应用日期范围过滤器。问题是它部分起作用。

我正在使用一个简单的VBA,似乎是方法。我正在使用两个控件(开始和结束)和一个按钮来应用过滤器。

他是我的代码示例

With Me.Sub_Desi_Schedule.Form
    .Filter = "[Task_End] " & " BETWEEN " & "#" & DateStart & "#" & " AND " & "#" & DateEnd & "#"
    .FilterOn = True

它工作正常,除非我选择一个日期范围,该日期范围包含该月最后几天的值(作为开始期间)以及下个月第一周内的任何值(作为结束期间)。 即使有值且没有任何错误信息可以帮助我解决问题,结果也是空白。

我认为它可能是日期格式的东西。我试图将它逼到DDMMYYY。没有效果,它有同样的奇怪行为。

对于本月晚些时候选择的任何其他范围,它可以正常工作......

以前有人有这个问题吗?有什么东西显而易见吗?

1 个答案:

答案 0 :(得分:1)

我怀疑你是对的,问题是由于日期格式造成的。

检查代码创建的已完成的过滤器字符串。通过使用变量来保持它。然后,您可以使用Debug.Print查看该内容,然后将该变量分配给表单.Filter属性。

Dim strFilter As String
With Me.Sub_Desi_Schedule.Form
    strFilter = "[Task_End] BETWEEN #" & DateStart & "# AND #" & DateEnd & "#"
    Debug.Print strFilter ' <- view this in Immediate window; Ctrl+g will take you there
    .Filter = strFilter
    .FilterOn = True
End With

通过对这些日期/时间值使用明确的 yyyy-m-d 格式,可以避免由于日期格式引起的问题。

strFilter = "[Task_End] BETWEEN " & Format(DateStart, "\#yyyy-m-d\#") & " AND " & Format(DateEnd, "\#yyyy-m-d\#")

我在#表达式中添加了Format分隔符。但你不需要这样做;我认为这也应该有效......

strFilter = "[Task_End] BETWEEN #" & Format(DateStart, "yyyy-m-d") & "# AND #" & Format(DateEnd, "yyyy-m-d") & "#"