我想过滤3个月以上的日期,并且我想要系统变量
Dim Date3M_ago As Date
Date3M_ago = Worksheets("Engine").Range("C1")
Selection.AutoFilter
ActiveSheet.Range("A:C").AutoFilter Field:=46, Operator:= _
xlFilterValues, Criteria1:= Date3M_ago
'Worksheets("Engine").Range("C1")
是单元格,在该单元格中,我有公式向我显示3个月前的日期,并引用了当前日期
问题是我无法写criteria1:= < Date3M_ago
,因为它给了我错误。正确的语法为criteria1:= "< 8/28/2019"
,但这是一个固定的日期,我不需要。
答案 0 :(得分:1)
自动过滤器无法应用于您尝试自动过滤的范围之外的列。在您的示例中,您尝试过滤AT列(Field:=46
),但仅应用从A列到C列的范围。将AT列应用于自动过滤器,如下所示:
ActiveSheet.Range("A:AT").AutoFilter Field:=46, Operator:= _
或将您的字段更改为包含在范围内的字段:
ActiveSheet.Range("A:C").AutoFilter Field:=3, Operator:= _
还有一个建议,用vba计算代替对30天前填充您的日期的单元格的引用,以防止破坏:
Date3M_ago = DateAdd("m", -3, Now)
答案 1 :(得分:0)
您可以尝试以下操作:
Dim Date3M_ago As Date
Date3M_ago = Worksheets("Engine").Range("C1")
ActiveSheet.UsedRange.AutoFilter Field:=46, Criteria1:="<" & Date3M_ago, Operator:=xlAnd
答案 2 :(得分:0)
希望这里的内容对您有用:
您说您需要过滤掉比今天早三个月的日期(这就是您在Worksheets("Engine").Range("C1")
中的公式所做的。同样可以通过VBA使用Application.WorksheetFunction.EDate(Date, -3)
甚至是{{ 1}}(按照@Plutian的回答)。如果这不是您的意图,则可以在该位置再次引用您自己的变量,但请确保将其转换为一个双精度值以在过滤器中使用> {{1} }。
DateAdd
可以节省日期时间值。如果我们将上述内容与以下示例数据一起使用(日期格式为“ d-m-yyyy”:
要在C列上过滤的一段代码如下:
CDbl(Date3M_ago)
请注意要过滤的字段如何在要过滤的范围内,例如:第三列?输出如下: