VBA代码使用InputBox按确切日期过滤工作表

时间:2018-11-04 15:18:21

标签: excel vba excel-vba

我们正在尝试使此代码能够按准确的日期过滤工作表,但仍然无法弄清楚,有什么主意吗?日期在工作表中的格式为mm / dd / yyyy

Sub FilterDate()
    Dim ap, dt As Date, dt1 As Date, lr&: lr = ActiveSheet.UsedRange.SpecialCells(11).Row

    With ActiveSheet.[a1].CurrentRegion.Resize(lr, 10)
        ap = Application.InputBox("get date")
        dt = CDate(ap)
       .AutoFilter 10, "=" & dt
    End With
End Sub

File sample

感谢您指出声明问题,我在excel工具中进行了更改,但是代码似乎还有另一个问题,任何日期输入仅保留第一行...

1 个答案:

答案 0 :(得分:2)

您缺少声明变量!!使用Option Explicit将使您的工作更加轻松,因为没有声明的变量就无法运行代码。

在VBA编辑器中,转到:“工具”->“选项”->“ Require Variable Declaration”。

Sub FilterDate()
    Dim ap As Date, dt As Date, dt1 As Date
    Dim lr As Long
    lr = ActiveSheet.UsedRange.SpecialCells(11).Row
    With ActiveSheet.[a1].CurrentRegion.Resize(lr, 10)
        ap = Application.InputBox("get date")
        dt = CDate(ap)
        'dt = CDate("2018-10-26")
        .AutoFilter 10, Criteria1:=">=" & dt, _
                     Operator:=xlAnd, Criteria2:="<" & dt + 1
    End With
End Sub

enter image description here


编辑:

是的,因为您有日期,所以需要filter in an interval,而不是一个“ =”条件(两个条件,即您的日期在这两个条件之间),不要忘记制作一个标题,因为标题值始终存在(代码已更新)。以下示例的日期为2018-10-26。

enter image description here