Vba 从单元数据触发的有源滤波器
我想要的是一个过滤器,我可以在单元格中键入一个条目,然后使用列过滤器的其余部分。清除此条目后,工作表应恢复到我开始键入之前的状态。当前,当我从该框中删除时,它会清除工作表上的所有数据 我目前使用的是这段代码。有人知道如何干净地工作吗Vba 从单元数据触发的有源滤波器,vba,excel,Vba,Excel,我想要的是一个过滤器,我可以在单元格中键入一个条目,然后使用列过滤器的其余部分。清除此条目后,工作表应恢复到我开始键入之前的状态。当前,当我从该框中删除时,它会清除工作表上的所有数据 我目前使用的是这段代码。有人知道如何干净地工作吗 Private Sub Worksheet_Change(ByVal Target As Range) If (Intersect(Target, Range("G2")) Is Nothing) _ Then Exit Sub End
Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, Range("G2")) Is Nothing) _
Then
Exit Sub
End If
Cells.AutoFilter Field:=7, Criteria1:="=" & Range("G2")
End Sub
如果在
G2
中有空值,我相信此代码将删除这些条件。我还添加了一个检查,以确保您的目标
仅为一个单元格,因为如果您修改了包含G2
的整个范围,则此时您的代码将被触发
Private Sub Worksheet_Change(ByVal Target As Range)
If Target is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Row <> 2 Then Exit Sub
Dim LastCol As Long
LastCol = Cells(4, Columns.Count).End(xlToLeft).Column
If Target.Value = "" Then
Range(Cells(4, 1), Cells(4, LastCol).AutoFilter Field:=Target.Column
Else
Range(Cells(4, 1), Cells(4, LastCol).AutoFilter Field:=Target.Column, Criteria1:="=" & Target.Value
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标为Nothing,则退出Sub
如果Target.Cells.Count>1,则退出Sub
如果为Target.Row 2,则退出Sub
暗淡如长
LastCol=单元格(4,Columns.Count).End(xlToLeft).Column
如果Target.Value=”“,则
范围(单元格(4,1)、单元格(4,LastCol)。自动筛选字段:=Target.Column
其他的
范围(单元格(4,1),单元格(4,LastCol)。自动筛选字段:=Target.Column,准则1:=“=”&Target.Value
如果结束
端接头
更新代码以适用于第2行中更改的任何值。Chismas007在相关注释上还有一个问题,说明我在这里缺乏知识。为什么我不能在单元格“F2”上做同样的私有子工作?也非常感谢您在第一部分的帮助!我的错误可能来自两个方向之一。我将目标单元格更改为“F2”将字段改为“6”,然后它告诉我这是一个模棱两可的名称,这是一个愚蠢的错误,因为我忘了重命名它。当我重命名它时,它不再是一个“工作表”对象,而是一个“(常规)”对象。我不知道如何更改该值…再次强调,这可能是一个症状,而不是问题本身。当您使用
单元格。AutoFilter
时,您正在选择工作表上的每个单元格。也许您应该定义要筛选的范围?我将其设置为“范围”(“G4:G5401”).AutoFilter字段:=7'指定自动筛选。这没有改变任何内容,这是您的意思吗?请尝试“A4:G5401”以获取整个表格。字段7指筛选区域中的第7列