循环IF基于自动过滤条件

时间:2013-10-12 15:40:08

标签: excel excel-vba excel-2010 vba

由于我对Excel Macro缺乏经验,我正试图解决一个我实际上遇到的问题。我想基于Autofilter选择构建IF循环;如果是正反馈(“磁铁”自动过滤器选择),宏应显示一些以前隐藏的列。

这是我的实际宏,但我在第一个if语句

上遇到了问题
Sub Hide()
    If ActiveSheet.Range("$B$8:$V$20").AutoFilter Field:=6, Criteria1:="Magnet" Then
        Range("I:N").EntireColumn.Hidden = False
    Else
        Range("I:N").EntireColumn.Hidden = True
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

<强>逻辑:

  1. 检查工作表是否具有自动过滤器
  2. 检查相关字段中的过滤器是否已打开
  3. 检索条件,如果符合您的要求,则显示/隐藏列
  4. 试试这个

    <强>代码

    Sub Sample()
        Dim ws As Worksheet
        Dim af As AutoFilter
    
        '~~> Change this to the relevant worksheet
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        With ws
            '~~> Check if there is an Autofilter
            If .AutoFilterMode Then
    
                '~~> Set your autofilter object
                Set af = .AutoFilter
    
                '~~> Check if the 6th field is filtered
                If af.Filters(6).On Then
                    '~~> Check if the criteria matches.
                    If af.Filters(6).Criteria1 = "=Magnet" Then
                        .Range("I:N").EntireColumn.Hidden = False
                    Else
                        .Range("I:N").EntireColumn.Hidden = False
                    End If
                End If
            End If
        End With
    End Sub
    

    <强>截图

    enter image description here