Excel VBA:如何一次只取消一个自动filter范围? 代码提供

感谢您来到这个线程。

我拥有的:

– 在行A:G上使用自动filter的报告

我需要的:

– 如果有filter的话,那么不需要过滤特定列的实际代码。

运行下面的代码,不需要过滤A:G的整个范围。

– 在这个例子中,我只想要“F”而不过滤,如果过滤掉了任何其他的filter。

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

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

尝试这个:

 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 

…实际上closures整个表单的过滤。 而是我的代码检查工作表是否被过滤:

 If .AutoFilterMode = True Then 

然后检查filter是否包含G列:

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

我做了一些改变,使你的代码更灵活一些。 它也使智能感知的ws对象,这是有帮助的。 (我总是发现各种Filter相关的属性和方法混淆,特别是没有自动完成。)

这对我有效

 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 

我刚刚在模块中input了下面的简单代码,对我来说工作得很好。 您将需要更改您的数据范围和字段以匹配您的数据。 我正在清除列A到M中的数据的filter。字段8是列H.

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