TL;DR,我想要实现的目标:
- 隐藏一些我不想向任何人显示的列(选中)
- 隐藏一些我只想显示给某些用户的列(勾选)
- 为两个列组设置单独的密码(一个我不会透露,另一个我会向选定的用户透露)(取消选中)
但问题是:
- 如果我在保护整个工作表的级别上选中“允许所有用户格式化列”,则任何人都可以取消隐藏所有列
- 如果我为范围设置密码(“允许用户编辑范围”),同时未选中“允许所有用户格式化列”,则在不知道上级密码的情况下无法取消隐藏任何列(这也保护了我不想向任何人显示的列)
完整故事:
我有一个想要共享的 Excel 文件。其中有一些隐藏的列,我不希望任何人取消隐藏。但另一方面,有 2 列我希望以某种方式受到保护,以便某些用户可以查看(取消隐藏)它们。
我已经深入研究了保护工作表、授予用户访问范围的权限等,但我无法找到解决列隐藏/取消隐藏的方法。
我尝试隐藏所有列(我希望永久隐藏的列和我希望某些用户取消隐藏的列)并为工作表编辑设置密码。然后,我想我应该为编辑范围设置一个单独的密码(我选择了我想要的列)。但仍然无法取消隐藏单独的范围(由我想通过向某些用户提供此特定范围的密码来向他们显示的列组成)。
因此,我尝试在整个工作表级别上实现某些功能,并发现存在属性“允许所有用户...”->“格式化列”。但是,所有用户都可以取消隐藏所有列(而我只希望他们能够取消隐藏我选择的列)。
顺便说一句,我使用 Excel 2007。
答案1
我将隐藏的单元格放在另一张表上并通过 VBA 保护它,例如:
Sheets("sheet4").Visible = xlVeryHidden
或者
Worksheets("sheet1").protect "Password", UserInterfaceOnly:=True
或者
ActiveSheet.protect "Password", AllowFormattingRows:=True, AllowFormattingColumns:=True
或者其他方法。xlveryhidden
是一个很好的起点,然后锁定 UI 并访问 VBA
答案2
我遇到了类似的问题,并使用数据分组来分离分组行(我允许用户展开)和隐藏行(无法取消隐藏)。保护工作表而不允许用户格式化会导致隐藏行无法取消隐藏。通过以下代码允许扩展列分组:
Dim wSheet as Worksheet
For Each wSheet In ThisWorkbook.Worksheets
wSheet.Protect Password:="Password", UserInterFaceOnly:=True
wSheet.EnableOutlining = True
Next