带用户输入的VBA时间过滤器

时间:2018-06-10 17:55:33

标签: vba excel-vba excel

我有下一个VBA代码知道如何在两个日期范围之间进行过滤:

Public Sub MyFilter()
    Dim lngStart As Date, lngEnd As Date
    lngStart = Range("b2").Value 'assume this is the start date
    lngEnd = Range("b3").Value 'assume this is the end date
    Range("A5:T5").AutoFilter Field:=17, _
        Criteria1:=">=" & lngStart, _
        Operator:=xlAnd, _
        Criteria2:="<=" & lngEnd


End Sub

我想知道如何修改它以使用户更友好并更新它:  1.结束时间可以始终是当前时间。  2.我希望在开始时单元格我能够输入如下数字:4,5,9,代码将知道将其修改为“当前日期-4小时”而不是让我输入完整日期字符串。

我知道如何编辑它?谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,所以我猜了一下。
看看这个:

Public Sub MyFilter()
    Dim StartDate As Date, EndDate As Date

    StartDate = DateAdd("h", -Range("b2"), Now)
    EndDate = Now

    Range("A5:T5").AutoFilter Field:=17, _
        Criteria1:=">=" & StartDate, _
        Operator:=xlAnd, _
        Criteria2:="<=" & EndDate

End Sub

我已将结束日期值替换为Now,这会给出当前时间。根据您的需要,您可能需要将其调整为今天或昨天的午夜。现在使用DateAdd计算开始日期。从B2中提取小时数并从Now中扣除。

不过 - 你需要重新考虑你的变量命名。用lng前缀日期不是好习惯