我有一个带有子表单(连续表单)的表单,我想在其上应用日期范围过滤器。问题是它部分起作用。
我正在使用一个简单的VBA,似乎是方法。我正在使用两个控件(开始和结束)和一个按钮来应用过滤器。
他是我的代码示例
With Me.Sub_Desi_Schedule.Form
.Filter = "[Task_End] " & " BETWEEN " & "#" & DateStart & "#" & " AND " & "#" & DateEnd & "#"
.FilterOn = True
它工作正常,除非我选择一个日期范围,该日期范围包含该月最后几天的值(作为开始期间)以及下个月第一周内的任何值(作为结束期间)。 即使有值且没有任何错误信息可以帮助我解决问题,结果也是空白。
我认为它可能是日期格式的东西。我试图将它逼到DDMMYYY。没有效果,它有同样的奇怪行为。
对于本月晚些时候选择的任何其他范围,它可以正常工作......
以前有人有这个问题吗?有什么东西显而易见吗?
答案 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") & "#"