Table 可以从 GUI 按日期过滤,但不能 VBA

Table can be filtered on date from the GUI, but not VBA

我有一个 table,其中一列填满了日期。我想在每次打开时在此列表上添加动态排序,所以我制作了一个宏来触发 Workbook_Open.

上的日期过滤器更新

问题是 过滤器在通过 VBA 输入时不显示任何结果,即使我在 GUI 中手动验证代码输入了正确的日期.更重要的是,如果我在 GUI 中验证日期后简单地按 Enter(即,不更改 任何东西),过滤器就会突然起作用。

这是代码,注释掉的行是我试过的。最后一行是当我记录 GUI 过程时宏记录器给我的确切代码(手动过程显示所需的结果而它的代码没有):

Sub FixSortings
    tbl.Sort.SortFields.Clear
    tbl.Sort.SortFields.Add Key:=Range("Tabell2[[#All],[Ref dato]]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    With tbl.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    tbl.ShowAutoFilter = False

    'tbl.Range.AutoFilter Field:=9, Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "dd.mm.yy")), Operator:=xlAnd, Criteria2:="<=" & CStr(Format(Now(), "dd.mm.yy"))
    'tbl.Range.AutoFilter Field:=9, Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "mm.dd.yy")), Operator:=xlAnd, Criteria2:="<=" & CStr(Format(Now(), "mm.dd.yy"))
    'tbl.Range.AutoFilter Field:=9, Criteria1:=">=22.08.2016", Operator:=xlAnd, Criteria2:="<=22.02.2017"
    ActiveSheet.ListObjects("Tabell2").Range.AutoFilter Field:=9, Criteria1:=">=22.08.2016", Operator:=xlAnd, Criteria2:="<=22.02.2017"
End Sub

tbl 声明是正确的,我知道这是事实,因为排序是按应有的添加的..并且过滤器也以某种方式添加(因为我可以找到输入的日期我从 GUI 的下拉按钮中检查了 table),似乎虽然添加了过滤器的条件,但它没有执行......或类似的东西。

我有一个想法,这可能与日期格式的本地化有关。您可以在我的代码中看到我使用的是欧洲日期格式 (dd.mm.yy),并且我之前在 VBA 中遇到过日期戳问题,因为 VBA 似乎更喜欢美国日期格式。

但是,正如您在我的代码中看到的那样,我尝试应用 mm.dd.yy 格式 - 但没有成功。

答案似乎是 VBA 确实 对它的日期格式有特殊要求。

此代码有效,当问题中的 none 有效时。

tbl.Range.AutoFilter Field:=9, _
    Criteria1:=">=" & CStr(Format(DateAdd("m", -6, Now()), "yyyy-mm-dd")), _ 
    Operator:=xlAnd, _
    Criteria2:="<=" & CStr(Format(Now(), "yyyy-mm-dd"))

作为一个更接近的结果,我只能得出结论,我使用以前尝试过的代码没有得到任何结果,因为 VBA 并不总是能很好地与其他日期格式一起使用,但它愿意将字符串输入 table 无论如何。然后,当我使用 GUI 检查 table 的过滤器并按 Enter 时,Excel 识别日期格式,因为它不像 VBA 引擎那么难,而且过滤器申请成功