首页 > 解决方案 > 带有用户输入的 VBA 时间过滤器

问题描述

我有下一个知道如何在两个日期范围之间过滤的 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 小时”,而不是让我输入完整的日期字符串。

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

标签: vbaexcel

解决方案


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

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 为日期添加前缀不是一个好习惯


推荐阅读