如何使用VBA过滤自定义日期时间yyyy-mm-dd hh:mm:ss?

问题描述 投票:0回答:1

我“学习”如何在 VBA 中做事的方法之一是录制宏,然后查看代码。我有一个 Excel 表格,其中有一列格式为 yyyy-mm-dd hh:mm:ss。

因此,我记录了使用“文本过滤器”、“自定义过滤器”过滤该列,大于 2023-01-01 00:00:01 且小于 2023-01-31 23:59:59。

这是我录制得到的代码:

    ActiveSheet.ListObjects("TABLAMOVSINVT").Range.AutoFilter Field:=43, _
        Criteria1:=">=2023-01-01 00:00:01", Operator:=xlAnd, Criteria2:= _
        "<=2024-01-31 23:59:59"

我确实有日期时间在上述范围内的行。 Excel 未正确筛选行。事实上,手动应用过滤器后,我得到了零行。

使用VBA代码,如

MsgBox "Data Type: " & VarType(cell. Value)

我发现单元格是 'vbString' (8): String。

知道它是一个字符串,我已经使用此处找到的代码示例进行了大量测试,但无法使其工作。

我尝试过使用 String、CDate(InitialDate$) 和 CDate(FinalDate$) 等标准,但它不起作用。

以下均无效:

FechaI$ = ">=2023-01-01 00:00:00"
FechaF$ = "<=2023-01-31 23:59:59"
'tablaMOVSINV.Range.AutoFilter Field:=43, Criteria1:=Array(CDate(FechaI$), CDate(FechaF$)), Operator:=xlFilterValues

tablaMOVSINV.Range.AutoFilter Field:=43, Criteria1:=">=" & FechaI$, Operator:=xlAnd, Criteria2:="<=" & FechaF$
Stop

tablaMOVSINV.Range.AutoFilter Field:=43, Criteria1:=">=" & Format(CDate(FechaI$), "yyyy-mm-dd hh:mm:ss"), Operator:=xlAnd, _
                                         Criteria2:="<=" & Format(CDate(FechaF$), "yyyy-mm-dd hh:mm:ss")

tablaMOVSINV.Range.AutoFilter Field:=43, Criteria1:=Array(FechaI$, FechaF$), Operator:=xlFilterValues
Stop

我非常感谢您在两件事上提出的宝贵建议: a) 如何在 Excel 中手动设置过滤器 b) 如何使用 VBA 使过滤器工作。

谢谢艾德

excel vba filter
1个回答
0
投票

对于手动过滤设置,如果电子表格中的日期是文本,则需要在文本过滤条件中的日期文本前加上撇号,否则Excel会将其视为日期而不是文本。
不过,说到VBA,我还是要查一下。也许其他人会更快回答。

© www.soinside.com 2019 - 2024. All rights reserved.