【发布时间】:2016-01-27 11:14:38
【问题描述】:
我有以下代码,它删除过滤器,然后从选定的单元格重新应用它们:
Range("A10:AM10").Select
Selection.AutoFilter
Selection.AutoFilter
我遇到的问题是,当工作表受到保护并且我尝试运行代码时出错,那么有没有办法允许在受保护的工作表上打开和关闭过滤器?
【问题讨论】:
标签: vba excel filter autofilter
我有以下代码,它删除过滤器,然后从选定的单元格重新应用它们:
Range("A10:AM10").Select
Selection.AutoFilter
Selection.AutoFilter
我遇到的问题是,当工作表受到保护并且我尝试运行代码时出错,那么有没有办法允许在受保护的工作表上打开和关闭过滤器?
【问题讨论】:
标签: vba excel filter autofilter
你好吗?
这取决于保护的设置。当您保护工作表时,可以选择允许过滤 (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
您的代码应该可以同时使用这两个选项。
希望对你有帮助!
【讨论】:
对于在 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 返回“语法错误”。