Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从单元数据触发的有源滤波器_Vba_Excel - Fatal编程技术网

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列