在Excel VBA中创建多字段搜索功能

时间:2016-11-16 17:24:12

标签: excel vba excel-vba filter autofilter

我需要在VBA中构建链接搜索功能,在您将数据输入给定搜索字段后也会自动更新。我已经能够通过以下代码部分成功完成此任务:

自动过滤搜索 - 在标准模块中

代码:

Sub FilterTo1Criteria()
With Sheet3
    If Range("A3") <> vbNullString Then
        .AutoFilterMode = False
        .Range("A6:J1015").AutoFilter
        .Range("A6:J1015").AutoFilter Field:=1, Criteria1:=Range("A3")
    Else
        Selection.AutoFilter
    End If
End With
End Sub

工作表更改/自动更新 - 这是在工作表模块中

代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$3" Then
        Application.EnableEvents = False
        FilterTo1Criteria
        Application.EnableEvents = True
    End If
End Sub

但是,在工作表更改页面中,我需要单元格A3:J3作为标准,但如果只填写A3和D3,或者只填充A3,我还需要自动搜索功能才能工作(D3是空白),或者如果只填充了D3(A3是空白的),但是我在尝试复合代码以获得此效果时遇到问题。我需要做多少复杂的事情?是否有一些例子让我知道我可以从中收集一些信息?很难找到任何......

带有数据透视表的切片机是一种潜在的方法,但我认为下游的一些人正在使用Excel 2003,我不认为切片器能够起作用。

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果A3或D3不为空,那么函数可以工作,那么你可以连接两个单元格并将其与vbNullString进行比较。

对于多个过滤器,您可以使用循环来设置它们。

例如:

Sub FilterTo1Criteria()
    Dim i As Long
    With Sheet3
    If Range("A3") & Range("D3") <> vbNullString Then
            .AutoFilterMode = False
            .Range("A6:J1015").AutoFilter
            For i = 1 To 10
                .Range("A6:J1015").AutoFilter Field:=i, Criteria1:=Cells(3, i)
            Next i
        Else
            Selection.AutoFilter
        End If
    End With
End Sub

修改:

看起来您想要将过滤器设置为填充的条件,而不是一次性完成。试试这个:

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

并为新工作表更改子:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("$A$3:$J$3")) Is Nothing Then
        Application.EnableEvents = False
        FilterTo1Criteria
        Application.EnableEvents = True
    End If
End Sub

这将在您添加或删除条件时添加或删除过滤器(第3行)。