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)
请注意,上面需要是"真实日期"而不是看起来像日期的字符串.即使是一个单独的"字符串日期"也会搞砸.
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/yyyy
或dd/mm/yyyy
Excel可以适合02/jan为01/feb.
见:http: //www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm
使用Excel的规则(国际问题)
- 当您必须将数字和日期转换为字符串以传递给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 不理解其他格式。