【问题标题】:VBA: How do I allow filters to be turned on and off on a protected sheet?VBA:如何允许在受保护的工作表上打开和关闭过滤器?
【发布时间】:2016-01-27 11:14:38
【问题描述】:

我有以下代码,它删除过滤器,然后从选定的单元格重新应用它们:

Range("A10:AM10").Select

Selection.AutoFilter
Selection.AutoFilter

我遇到的问题是,当工作表受到保护并且我尝试运行代码时出错,那么有没有办法允许在受保护的工作表上打开和关闭过滤器?

【问题讨论】:

    标签: vba excel filter autofilter


    【解决方案1】:

    你好吗?

    这取决于保护的设置。当您保护工作表时,可以选择允许过滤 (AutoFilter)。

    如果您是保护工作表的人,您可以使用工作表的任何 protect 方法的参数来设置保护选项。这里是protect方法的参数:

    sheetName.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
    

    如果您希望能够仅通过代码实现过滤器,则可以将 UserInterfaceOnly 参数设置为 TRUE。保护将仅阻止用户更改。完全允许代码更改。

    sheetName.Protect UserInterfaceOnly:=True
    

    或者,如果您想允许用户从界面过滤工作表的内容,只需将 AllowFiltering 参数设置为 TRUE 以及 UserInterfaceOnly 参数。

    sheetName.Protect UserInterfaceOnly:=True, AllowFiltering:=True
    

    您的代码应该可以同时使用这两个选项。

    希望对你有帮助!

    【讨论】:

    • 有没有办法在不通过代码保护工作表的情况下做到这一点? IE。只是通过 Excel 的“保护表”按钮保护它?
    • 嗨@BenSmith。就在这里。在“保护表”对话框中有一个保护选项列表。其中之一是“使用自动筛选”(我使用的是 Excel 2013。我不记得早期版本的 Excel 中的名称是否不同。但它就在那里!)。只需标记该复选框,您就可以开始了!
    【解决方案2】:

    对于在 2022 年或之后发现此问题的任何人,您还需要以下参数:

    sheetname.EnableAutoFilter:=True
    

    对于包含 Pedro 贡献的完整答案,这些代码行可让您在通过 VBA 使用密码锁定的工作表上使用过滤器:

    With Sheets(sheetname)
        .Protect UserInterfaceOnly:=True
        .Protect AllowFiltering:=True
        .EnableAutoFilter:= True
        .Protect Password:="my password"
    End With
    

    (我会提供对佩德罗的回答的评论,但不幸的是,我的代表还不够高。)

    【讨论】:

    • .EnableAutoFilter:=True 返回“语法错误”。
    猜你喜欢
    • 2019-04-28
    • 2015-11-03
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2013-12-15
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多