2

我正在尝试解决一个由于我对 Excel 宏缺乏经验而实际上被卡住的问题。我想建立一个基于自动过滤器选择的 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
4

1 回答 1

1

逻辑:

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

试试这个

代码

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

截屏

在此处输入图像描述

于 2013-10-12T18:12:39.493 回答