将日期过滤器搜索添加到当前自动过滤器VBA行

时间:2016-11-17 16:27:00

标签: excel vba excel-vba autofilter

在另一个关于自动过滤器的问题上,我被bobajob极大地帮助了。但是,我需要稍微复杂化一些事情。以下代码允许用户在excel中搜索产品的小数据表并使其自动过滤。它的工作非常出色(再次感谢bobajob !!),但我需要通过添加日期搜索功能使其稍微复杂化。此文件涉及某些产品,日期指的是生产日期,到期日期等。原始搜索功能允许搜索特定品牌,生产地点和序列号...但现在我必须添加在两个日期之间制造这些物品时拉起的能力,但仍保留其制造地点的搜索标准等。

通过修改下面的代码是最好的方法吗?或者添加一个单独的模块?那仍然可以链接两个领域等?

Sub FilterTo1Criteria()
    Dim i As Long
    With Sheet1
        .AutoFilterMode = False
        .Range("A9:J1018").AutoFilter
        For i = 1 To 10
            If .Cells(3, i) <> vbNullString Then
                .Range("A9:J1018").AutoFilter Field:=i, Criteria1:=.Cells(3, i)
            End If
        Next i
    End With
End Sub

提前致谢!!

1 个答案:

答案 0 :(得分:0)

鉴于我对原作很熟悉,我也会对此有所了解。以下将测试第三行(第一个标准)以查看它是否为日期,如果是,将使用第3行和第4行来定义要过滤的日期范围:

Sub FilterTo1Criteria()
    Dim i As Long
    With Sheet1
        .AutoFilterMode = False
        .Range("A9:J1018").AutoFilter
        For i = 1 To 10
            If .Cells(3, i) <> vbNullString Then
                If IsDate(.Cells(3, i)) Then
                    .Range("A9:J1018").AutoFilter Field:=i, Criteria1:=">=" & CLng(.Cells(3, i)), Criteria2:="<=" & CLng(.Cells(4, i))
                Else
                    .Range("A9:J1018").AutoFilter Field:=i, Criteria1:=.Cells(3, i)
                End If
            End If
        Next i
    End With
End Sub

注意我首先将日期转换为多头,这有望避免日期本地化中的任何歧义。