自动过滤处于活动状态时隐藏列

自动过滤处于活动状态时隐藏列

我读过这个在单元格中显示 Excel 列过滤器信息它基本上可以完成预期的工作。但我想在过滤器处于活动状态时隐藏和取消隐藏 A 列。因此,我输入了以下隐藏取消隐藏代码

Function CheckFilters(r As Range) As String

Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
c = AWS.AutoFilter.Filters.Count

'go through each column and check for filters
For i = 1 To c Step 1
   If AWS.AutoFilter.Filters(i).On Then
        ActiveSheet.Columns(1).Hidden = True
        fstate = fstate & r(i).Value & ", "
   End If
Next i

'removes the last comma
fstate = Left(fstate, Len(fstate) - 2)

Else
ActiveSheet.Columns(1).Hidden = False
fstate = "Keine aktiven Filter"
End If

CheckFilters = fstate

End Function

但从ActiveSheet.Columns(1).Hidden = True函数调用时似乎被忽略了。当我从子函数调用它时,它可以工作。

谁能帮我?

答案1

我找到了解决方案https://stackoverflow.com/a/12808974/3789751

我有以下子

Sub HideUnHide()
Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
    c = AWS.AutoFilter.Filters.Count

    For i = 1 To c Step 1
        If AWS.AutoFilter.Filters(i).On Then
            ActiveSheet.Columns(1).Hidden = True
        End If
    Next i

Else
    ActiveSheet.Columns(1).Hidden = False
End If
End Sub

这是从Worksheet_Calculate

Sub Worksheet_Calculate()
    Call Modul1.HideUnHide
End Sub

答案2

虚拟专用网络 功能在修改工作表时非常不可靠(它们非常擅长返回值)。你最好使用相反。子程序将有两个参数;输入范围和输出字符串。

相关内容