我有以下代码,它删除过滤器,然后从选定的单元格中重新应用它们:
Range("A10:AM10").Select
Selection.AutoFilter
Selection.AutoFilter
我遇到的问题是,当工作表受到保护并且我尝试运行代码时会出错,那么有没有办法允许在受保护的工作表上打开和关闭过滤器?
你好吗?
这将取决于保护的设置。当您保护工作表时,有一个允许过滤的选项(自动过滤)。
如果您是保护工作表的人,则可以使用工作表的任何 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参数以及UserInterfaceOnly参数设置为TRUE即可。
sheetName.Protect UserInterfaceOnly:=True, AllowFiltering:=True
您的代码应该适用于这两个选项。
希望有帮助!
发现UserInterfaceOnly 设置完成后仅在文件打开期间有效。关闭文件然后重新打开它并尝试通过 vba 设置自动筛选会导致错误 400。我的解决方案是在设置自动筛选之前取消保护并再次保护工作表。