我需要在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,我不认为切片器能够起作用。
提前致谢!
答案 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行)。