日期的VBA过滤变为美国格式

时间:2014-05-10 10:39:08

标签: excel date excel-vba vba

我正在尝试过滤日期。检查过,控制面板知道我在英国。但是,当我过滤它 - 它有问题,似乎使用美国日期格式而不是英国。当您点击过滤器时,它会根据英国系统正确显示日期/月份。

当我录制代码以查看发生了什么时,会出现以下情况。日期将被定义 - 我只是想弄清楚当我的过滤器不起作用时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

3 个答案:

答案 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))

请注意,上面的内容需要是“真实日期”,而不是看起来像日期的字符串。即使是一个单独的“字符串日期”也会搞砸。