8

感谢您来到这个线程。

我有的:

- 带有 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

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

4

3 回答 3

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-related 属性和方法令人困惑,尤其是没有自动完成。)

于 2013-07-31T16:58:00.310 回答
2

这对我有用

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
于 2013-07-31T17:09:34.453 回答
2

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

ActiveSheet.Range("$A:$M").AutoFilter Field:=8
于 2017-02-08T15:19:47.007 回答