Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 列格式为日期的自动筛选_Excel_Vba_Date_Autofilter - Fatal编程技术网

Excel 列格式为日期的自动筛选

Excel 列格式为日期的自动筛选,excel,vba,date,autofilter,Excel,Vba,Date,Autofilter,我正在Excel中使用VBA自动筛选,它适用于常规筛选,但不适用于格式化为日期的列 我可以手动过滤。如果我运行我的代码,它不会过滤任何东西,但当我检查过滤器,然后只单击“确定”(没有更改应用于过滤器条件)时,它会正确过滤 这是我的密码: ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _ :=">" & CDate([datecell]), Operator:=xlAnd, Criteri

我正在Excel中使用VBA自动筛选,它适用于常规筛选,但不适用于格式化为日期的列

我可以手动过滤。如果我运行我的代码,它不会过滤任何东西,但当我检查过滤器,然后只单击“确定”(没有更改应用于过滤器条件)时,它会正确过滤

这是我的密码:

ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
        :=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
        "<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))
ws.ListObjects(SheetName).Range.AutoFilter字段:=3,标准1_
:=“>”&CDate([datecell]),运算符:=xlAnd,准则2:_

“使用Excel VBA AutoFilter时,日期可能会比较棘手。有些人发现,只需在要筛选的数组中循环即可

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

Criteria1:=“>”&CDbl([datecell])

准则2:=“您需要将格式转换为美式格式,如: “>”&格式([datecell],“mm/dd/yyyy”) VBA不理解另一种格式。

Karlos Henrique, 感谢您建议的格式([datecell],“mm/dd/yyyy”)。 它在我的文件中起作用。 我以前的代码是:

Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & StrtDt, _
  Operator:=xlAnd, _
  Criteria2:="<=" & EndDt
Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & Format(StrtDt, "mm/dd/yyyy"), _
  Operator:=xlAnd, _
  Criteria2:="<=" & Format(EndDt, "mm/dd/yyyy")
范围(“A1:D”和修剪(Str(LstRec))。自动筛选字段:=2_
标准1:=“>=”&StrtDt_
运算符:=xlAnd_
准则2:=“=”和格式(标准格式为“mm/dd/yyyy”)_
运算符:=xlAnd_
标准2:=“
Autofilter()
使用“通用”格式
yyyy-mm-dd
,即:

Criteria1:= ">" & Format([MY_DATE],"yyyy-mm-dd")
Criteria2:= "<=" & Format([MY_DATE],"yyyy-mm-dd")

此语法适用于我:

.AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(2, Format(Now, "yyyy-mm-dd"))

通过宏注册获得的提示将“dd-mm-yyy”与列的格式匹配,因此,如果源数据格式为“16-Aug-16”,则将筛选器设置为“dd-mmm-yy”

一个解决方案是正确设置目标列的格式。如果其格式为“custom”“,即使看起来像是约会,也不行


您要求VBA根据日期进行筛选,因此列的格式也必须是日期。

以下是occam的razor解决方案。。。尝试将其放入电子表格的“自动打开”中,或者如果需要,为希望影响的工作表修改它。这将导致日期标题的下拉筛选器显示为单个日期,而不是日期层次结构


ActiveWindow.AutoFilterDateGrouping=False

所以这对我来说非常有效

ActiveSheet.Range("$A$1:$K$35727").AutoFilter Field:=1, Criteria1:= _
        ">=" & Range("G1"), Operator:=xlAnd, Criteria2:="<=" & Range("H1")
ActiveSheet.Range($A$1:$K$35727”)。自动筛选字段:=1,标准1:_

“>=”&Range(“G1”),运算符:=xlAnd,准则2:=”我在筛选带有日期的列时遇到类似问题。当我将系统日期格式更改为2020年1月1日时,它在准则字段中将我的日期转换为2020年1月1日。
我的解决方案是在设置为函数时将参数转换为str。

如果将日期单元格格式更改为general,它是否显示数字?是的,正如我所说,一切正常。应用筛选器时出现问题。因为录制的宏也不起作用。请尝试转换为文本。例如
CDate([datecell])
更改为
格式([datecell],“dd-MMM-yy”)
也不起作用,请参见下面的答案和我的评论。这真的很荒谬。这似乎有点奇怪。是的。
[datecell]
工作表函数.EoMonth([datecell],3)的值是多少
如果您
调试。打印
msgbox
它们?是的,之前也尝试过,但也不起作用。这对我来说是个谜。特别是考虑到录制的宏也不起作用。另一个选项,当处理“日期之间”时,是使用Excel存储的编号。在回答中查看我的编辑另外要检查的是所有日期都是真正的日期,而不是碰巧看起来像日期的字符串。即使列表中只有一个“字符串日期”也会把事情搞砸。编辑您的答案,只显示CDbl版本,我将其标记为正确并投票。查看您的一些评论,并注意到您的设置将点作为日期分隔符,这让我做了一些测试。如果将点设置为系统日期分隔符,则即使输入格式([日期],“m/d/yyyy”),系统仍会将分隔符更改为点。为了使用斜杠分隔符获得正确的US格式,您需要使用格式代码:“m”“/”d”“/”yyy“,请尝试后一种方法,看看它在您的系统上是如何工作的。VBA格式函数的帮助中概述了此行为。这对我很有用。。。我的专栏被格式化为dd-mmmm-yyyy,这就把所有内容都扔掉了。更改标准修复了该问题。
.AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(2, Format(Now, "yyyy-mm-dd"))
ActiveSheet.Range("$A$1:$K$35727").AutoFilter Field:=1, Criteria1:= _
        ">=" & Range("G1"), Operator:=xlAnd, Criteria2:="<=" & Range("H1")