首页 > 解决方案 > 如何过滤行,隐藏/取消隐藏受保护工作表中的列?

问题描述

我有一个用于小组协作的 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”功能现在无法使用。

如何使过滤行和隐藏/取消隐藏列无缝工作?

标签: excelvba

解决方案


以下代码适用于我:

Private Sub Workbook_Open()

Dim wSheet As Worksheet

For Each wSheet In Worksheets
    wSheet.Protect Password:="password", UserInterFaceOnly:=True
Next wSheet

With ActiveSheet
    .Protect Password:="password", AllowFiltering:=True, AllowFormattingColumns:=True
    .EnableSelection = xlUnlockedCells
End With

问题似乎是两个 with 语句之间的不一致。第二个 with 语句(格式化列)阻止了第一个(过滤)。这有点奇怪,因为这些行应该是解锁的。

对你起作用吗 ?

干杯


推荐阅读