Excel VBA自动筛选器不使用Date列

Spu*_*ous 10 excel vba date autofilter

我在Excel中使用带有VBA的AutoFilter时出现问题.

它适用于常规过滤器,但过滤日期列不能按预期工作.该列被格式化为日期,我可以手动和荒谬地过滤它,如果我运行我的代码,它过滤什么,但当我检查过滤器,然后只点击确定(没有更改应用于过滤条件),它开始正确过滤.

这是我的代码:

ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
        :=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
        "<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?这似乎是一个常见的问题,但我还没有找到解决方案.

提前致谢.

编辑:只是添加,当我宏记录并运行录制的宏时,它也不起作用.

Ron*_*eld 17

Excel VBA AutoFilter的日期可能很棘手.有些人发现循环遍历要过滤的数组更容易.

有时我发现可以使用日期的数值,特别是在处理"日期之间"时

Criteria1:= ">" & CDbl([datecell])
Criteria2:= "<=" & CDbl(WorksheetFunction.EoMonth([datecell], 3))
Run Code Online (Sandbox Code Playgroud)

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


Mak*_*kah 9

Autofilter()使用'通用'格式yyyy-mm-dd,即:

Criteria1:= ">" & Format([MY_DATE],"yyyy-mm-dd")
Criteria2:= "<=" & Format([MY_DATE],"yyyy-mm-dd")
Run Code Online (Sandbox Code Playgroud)

它更好,因为Excel无法"理解"错误.如果您使用mm/dd/yyyydd/mm/yyyyExcel可以适合02/jan为01/feb.

见:http: //www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm

使用Excel的规则(国际问题)

  1. 当您必须将数字和日期转换为字符串以传递给Excel时(例如在AutoFilter或.Formula字符串的条件中),始终使用Trim(Str(MyNumber))或者显式将数据显式转换为US格式的字符串.对于所有数字和日期类型,前面显示的sNumToUS()函数.然后,Excel将正确使用它并将其转换为本地数字/日期格式.

编辑:

我们可以创建一个通用函数,使用Application.International如下:

Sub MySub()
    Select Case application.International(xlDateOrder)
        Case Is = 0
            dtFormat = "mm/dd/yyyy"
        Case Is = 1
            dtFormat = "dd/mm/yyyy"
        Case Is = 2
            dtFormat = "yyyy/mm/dd"
        Case Else
            dtFormat = "Error"
    End Select

    Debug.Print (dtFormat)

    ...
    Criteria1:= ">" & Format([MY_DATE],dtFormat)
    Criteria2:= "<=" & Format([MY_DATE],dtFormat)
    ...

End Sub
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要将格式转换为美国格式,例如:

">" & Format([datecell], "mm/dd/yyyy")
Run Code Online (Sandbox Code Playgroud)

VBA 不理解其他格式。