在Excel VBA中创build多字段searchfunction

我需要在VBA中build立一个链接的searchfunction,在将数据input到给定的search字段后,它也会自动更新。 我已经能够用下面的代码部分成功地完成这个工作:

自动filtersearch – 在标准模块中

码:

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为空白),我还需要自动searchfunction才能工作。 ,或者如果只是D3填充(A3是空白的),但我有问题试图复合代码来获得这种效果。 我要做多less更复杂? 是否有一些例子,有人知道,我可以看看收集一些信息? 很难find任何…

具有数据透视表的切片机是一种可行的方法,但我认为下游的一些人正在使用Excel 2003,我不认为切片机的工作原理如此之短。

提前致谢!

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

对于多个filter,可以使用循环来设置它们全部。

例如:

 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 

编辑:

看起来你想设置filter作为标准单元格填充,而不是一次。 试试这个:

 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 

这将添加或删除filter,添加或删除标准(第3行)。