我在Excel中将带有VBA的自动筛选器用于常规筛选器,但不适用于格式化为日期的列。
我可以手动过滤。如果我运行我的代码,它将过滤任何东西,但是当我检查过滤器然后仅单击“确定”(未对过滤条件应用更改)时,它将正确过滤。
这是我的代码:
ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
:=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
"<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))
这似乎是一个普遍的问题,但是我还没有找到解决方法。
当我运行一个录制的宏时,它也不起作用。
使用Excel VBA AutoFilter的日期可能比较棘手。一些人发现循环遍历要过滤的数组更容易。
[Autofilter()
使用'通用'格式yyyy-mm-dd
,即:
您需要将格式转换为美国格式,例如:“>”和格式([datecell],“ mm / dd / yyyy”)VBA无法理解其他格式。
此语法对我有用:
Karlos Henrique,感谢您提出Format([datecell],“ mm / dd / yyyy”)。它在我的文件中起作用。我以前的代码是:
将“ dd-mm-yyy”匹配到该列的格式,因此,如果源数据格式为“ 16-Aug-16”,则将过滤器设置为“ dd-mmm-yy”]
一种解决方案是正确设置目标列的格式。如果其格式设置为“ custom”,即使它看起来像一个日期,也将无法使用。
所以这对我很干净
这是occam的剃须刀解决方案...尝试将其放入电子表格的自动打开中,或者如果需要,请为希望影响的工作表进行修改。它将导致日期标题的下拉过滤器显示为单个日期而不是日期层次结构。