【问题标题】:Excel VBA: How to Unfilter Only One Autofilter Range at a Time? Code ProvidedExcel VBA:如何一次只取消过滤一个自动过滤范围?提供的代码
【发布时间】:2017-02-09 01:35:41
【问题描述】:

感谢您来到这个帖子。

我有什么:

-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

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

【问题讨论】:

  • 您的代码对我来说看起来不错,我也对其进行了测试,当我尝试它时,它完全按照您的要求进行,从单个字段中删除自动过滤器。
  • 当我运行代码时,它会完全删除自动过滤器。
  • 但是,它也会删除其他已经过滤的字段。因此,如果它们被过滤,自动过滤器将在 B 列和 C 列中重置。我实际上回答了我自己的问题,但我没有足够的代表来回答它。代码如下:Addr = Split(ActiveSheet.UsedRange.Address, "$") lastRow = Addr(UBound(Addr)) For r = lastRow To 1 Step -1 If Len(Cells(r, "A").Value)然后 lastRow = r Exit For End If Next ActiveSheet.Range("$A$1:$G" & lastRow).AutoFilter Field:=6
  • 附带说明,如果任何过去或现在的答案已经回答了您的问题,请务必通过单击它们旁边的复选标记来接受它们。就是这样:)。

标签: excel vba autofilter


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案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
    

    【讨论】:

    • 它对我不起作用。运行时没有任何变化。我在另一列和 G 上有一个过滤器。
    • 如果要删除的过滤器位于 G 列,则使用 Field:=7
    • 哎呀,你是对的,我还是 6 号。但是,如果过滤器位于工作表的另一部分,例如第一列,它仍然会失败。然后它通过了Not is Nothing 测试,但在Field:=6 行上有一个Error 1004`
    • 嗯。如果我对第 1、2 和 6 列进行过滤,则此代码将删除第 6 列上的过滤器,使 1 和 2 上的过滤器保持不变。如果我在第 6 列上没有过滤器开始,它也适用于我。我正在使用 Excel 2010;我想知道这是否会有所作为。
    • 什么你只在第一列有一个过滤器?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      相关资源
      最近更新 更多