【发布时间】:2020-02-16 00:31:18
【问题描述】:
我有一个用于小组协作的 Excel 工作表。它受密码保护。
由于密码保护限制,我正在尝试编写 VBA 代码,以便其他用户在受保护的工作表中仍然可以过滤行、隐藏/取消隐藏列。
它在 ThisWorkbook 中如下所示:-
Private Sub Workbook_Open()
Dim wSheet As Worksheet
For Each wSheet In Worksheets
wSheet.Protect Password:="LoveisPatience", _
UserInterFaceOnly:=True
Next wSheet
With ActiveSheet
.Protect Password:="LoveisPatience", AllowFiltering:=True
.EnableSelection = xlUnlockedCells
End With
With ActiveSheet
.Protect Password:="LoveisPatience", AllowFormattingColumns:=True
.EnableSelection = xlUnlockedCells
End With
End Sub
使用上面的代码,我设法隐藏以前用“数据选项卡>组”完成的列,但我无法取消隐藏任何列。
并且由于包含此“AllowFormattingColumns:”,行的“AllowFiltering”功能现在无法使用。
如何使过滤行和隐藏/取消隐藏列无缝工作?
【问题讨论】:
-
我想你会在这里找到你需要的东西:codevba.com/excel/protect_worksheet.htm#.Xki07-KF6Uk。另请查看 Microsoft 对您的主题的看法。 docs.microsoft.com/en-us/office/vba/api/excel.worksheet.protect
-
您好 Variatus_谢谢您的建议。您在上面显示的网站让我很好地理解了当 Excel 工作表受到保护时可以做什么。谢谢。
-
每个工作表都有一个
Protection对象,该对象具有许多可以修改的属性,就像您可以修改Range对象的每个属性一样。ActiveSheet.Protect为该工作表创建一个Protection对象。任何工作表都不能有多个Protection对象。因此下一个ActiveSheet.Protect删除现有对象并在其位置建立另一个对象。这个过程并没有给人以效率的印象。更好的方法是修改现有的。或者至少删除现有的(Unprotect),以免混淆代码的无辜读者。