Excel VBA:如何一次仅取消过滤一个自动过滤器范围?代码提供

时间:2013-07-31 16:15:31

标签: excel vba autofilter

感谢您加入此主题。

我有什么:

- 在行A:G

上使用自动过滤器的报告

我需要什么:

- 如果特定列上有过滤器,则不对特定列进行过滤的实际代码。

- 在下面运行我的代码,不会过滤整个范围的A:G。

- 在这种情况下,我只希望“F”未经过滤,如果过滤则只留下任何其他过滤器。

With Sheets("DATA")
    If .Range("F1").AutoFilter = True Then
        ActiveSheet.Range("$A$1:$G$59826").AutoFilter Field:=6
    Else
    End If
End With

非常感谢任何和所有想法!非常感谢你!

3 个答案:

答案 0 :(得分:7)

试试这个:

Sub UnFilter()
Dim ws As Excel.Worksheet

Set ws = Worksheets("DATA")
With ws
    If .AutoFilterMode = True Then
        If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then
            .Range("$A$1:$G$59826").AutoFilter Field:=.Range("G:G").Column
        End If
    End If
End With
End Sub

代码中的这一行:

If .Range("F1").AutoFilter = True

...实际上关闭了整张纸的过滤。相反,我的代码会检查是否使用以下内容过滤工作表:

If .AutoFilterMode = True Then

然后检查过滤器是否包含G列:

If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then

我做了一些更改,使您的代码更灵活一些。它还为ws对象启用Intellisense,这很有帮助。 (我总是发现各种与Filter相关的属性和方法令人困惑,特别是没有自动完成。)

答案 1 :(得分:1)

这对我有用

Sub UnfilterColumn()

    With Worksheets("DATA")
        If Not Worksheets("DATA").AutoFilter Is Nothing Then
                ThisWorkbook.Sheets("DATA").Range("A1").AutoFilter Field:=6
        End If
    End With

End Sub

答案 2 :(得分:0)

我刚刚在模块中输入了下面的简单代码,它对我来说很好。您需要更改数据范围和字段以匹配您的数据。我用A到M列中的数据清除过滤器。字段8是H列。

ActiveSheet.Range("$A:$M").AutoFilter Field:=8