【问题标题】:VBA time filter with user input带有用户输入的 VBA 时间过滤器
【发布时间】:2018-06-10 17:55:32
【问题描述】:

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

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

【问题讨论】:

    标签: vba excel


    【解决方案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 为日期添加前缀不是好习惯

    【讨论】:

    • 嗨,谢谢我搜索的内容。我还有两个简短的问题忘记提及了。 1.如果我在同一列下有空白单元格,我怎样才能得到它们? 2. 如果我希望我的结束时间总是在我打开文件的同一天上午 08:00,我该如何修改代码?谢谢!!!
    • 1.我不明白。 2.替换为EndDate = DateAdd("h","8",Date)
    • 关于 1. 我在同一列中有更多单元格包含“空”数据(空单元格),我也想检索它们。
    • 我明白了。我没有得到你想用它们做什么
    • empty cells = "(blank)" -- 它在 Excel 中的显示方式
    猜你喜欢
    • 2013-04-16
    • 2016-07-13
    • 1970-01-01
    • 2018-03-23
    • 2018-02-17
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多