【问题标题】:Applying filter for date less than equal to last day of the current month not working对小于等于当月最后一天的日期应用过滤器不起作用
【发布时间】:2018-02-27 19:50:36
【问题描述】:

我正在提取上个月的第一天和最后一天,并将过滤器应用于应显示这些日期之间的记录的日期列。

 first_dy = DateSerial(Year(Date), Month(Date) - 1, 1)
   last_dy = DateSerial(Year(Date), Month(Date), 0)
   With Worksheets("Sheet1")
        .AutoFilterMode = False
        .Range("A1:R100000").Select
        Selection.AutoFilter

   Worksheets("Sheet1").Range("A1").AutoFilter Field:=15, Criteria1:="<" & last_dy, Operator:=xlAnd, Criteria2:=">" & first_dy 

上面的代码显示零记录。但是,当我仅应用大于上个月第一天的标准时,它会向我显示该月和当月的正确记录。以下代码供参考:

  Worksheets("Sheet1").Range("A1").AutoFilter Field:=15, Criteria1:=">=" & first_dy

但是,当我对大于上个月最后一天的记录应用过滤器时,它没有显示任何记录。如果我使用下面的代码,代码工作正常。它只显示上个月最后一天的记录:

Worksheets("Sheet1").Range("A1").AutoFilter Field:=15, Criteria1:="=" & last_dy

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    使用CLng()

    Dim first_dy As Variant, last_dy As Variant
    
    first_dy = DateSerial(Year(Date), Month(Date) - 1, 1)
    last_dy = DateSerial(Year(Date), Month(Date), 0)
    With Worksheets("Sheet1")
        .Range("A1").AutoFilter Field:=15, Criteria1:="<" & CLng(last_dy), Operator:=xlAnd, Criteria2:=">" & CLng(first_dy)
    End With
    

    【讨论】:

    • @user9351236,有什么反馈吗?
    • 非常感谢。这对我来说很好,除了我必须从 first_dy 中删除 CLng,因为它不能使用它。再次感谢您的回复。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多