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

Nic*_*llo 7 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
Run Code Online (Sandbox Code Playgroud)

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

Dou*_*ncy 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
Run Code Online (Sandbox Code Playgroud)

代码中的这一行:

If .Range("F1").AutoFilter = True
Run Code Online (Sandbox Code Playgroud)

...实际上关闭了整张纸的过滤.而是我的代码检查工作表是否过滤了:

If .AutoFilterMode = True Then
Run Code Online (Sandbox Code Playgroud)

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

If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then
Run Code Online (Sandbox Code Playgroud)

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