我正在尝试过滤日期。检查过,控制面板知道我在英国。但是,当我过滤它 - 它有问题,似乎使用美国日期格式而不是英国。当您点击过滤器时,它会根据英国系统正确显示日期/月份。
当我录制代码以查看发生了什么时,会出现以下情况。日期将被定义 - 我只是想弄清楚当我的过滤器不起作用时VBA正在做什么。
Sub dating()
ActiveSheet.Range("$A$1:$AM$442").AutoFilter Field:=38, Operator:= _
xlFilterValues, Criteria2:=Array(2, "4/25/2014")
End Sub
我已将代码更新为,即使该列中包含该日期的数据,它仍然不会在该日期进行过滤。我可能在这里遗漏了一些明显的东西。
Dim dteInvoices As Date
dteInvoices = Worksheets("front sheet").Range("f14")
Worksheets("trade details").Range("A1").AutoFilter 39, strText
.Range("A1").AutoFilter 38, CLng(dteInvoices)
感谢http://www.ozgrid.com/VBA/autofilter-vba-dates.htm的帮助,我设法让它发挥作用
http://www.ozgrid.com/VBA/autofilter-vba-dates.htm
Range("a1").AutoFilter Field:=38, Criteria1:=">=" & lngDate, _
Operator:=xlAnd, Criteria2:="<" & lngDate + 1
答案 0 :(得分:2)
不是错误。在VBA的任何地方你都必须遵守美国惯例。哪个好:否则根据用户设置,必须使用不同的字符串!
我通常会使用Format(MyDate, "\#mm\/dd\/yy\#")
来确定。
答案 1 :(得分:0)
这似乎是Excel的一个错误。过滤器仅接受美国格式的日期。使用DATEVALUE将文本转换为日期,然后使用CLNG将日期转换为数字是有意义的。
编辑:请参阅此主题以获取解决方法:Filtering between two dates in pivot table using VBA. UK to US date format issue
答案 2 :(得分:0)
Excel VBA AutoFilter的日期可能很棘手。有些人发现循环遍历要过滤的数组更容易。
有时我发现可以使用日期的数值,尤其是在处理“日期之间”时
Criteria2:= CDbl([datecell])
或
Criteria2:= CLng(Dateserial(2014,4,25))
请注意,上面的内容需要是“真实日期”,而不是看起来像日期的字符串。即使是一个单独的“字符串日期”也会搞砸。