Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在受保护的工作表中筛选行、隐藏/取消隐藏列?_Excel_Vba - Fatal编程技术网

Excel 如何在受保护的工作表中筛选行、隐藏/取消隐藏列?

Excel 如何在受保护的工作表中筛选行、隐藏/取消隐藏列?,excel,vba,Excel,Vba,我有一个小组协作的Excel工作表。它受密码保护 由于密码保护限制,我正在尝试编写VBA代码,以便其他用户在受保护的工作表中仍然可以筛选行、隐藏/取消隐藏列 它位于此工作簿中,如下所示:- Private Sub Workbook_Open() Dim wSheet As Worksheet For Each wSheet In Worksheets wSheet.Protect Password:="LoveisPatience", _ UserInterFaceOnly:

我有一个小组协作的Excel工作表。它受密码保护

由于密码保护限制,我正在尝试编写VBA代码,以便其他用户在受保护的工作表中仍然可以筛选行、隐藏/取消隐藏列

它位于此工作簿中,如下所示:-

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”函数现在无法运行


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

以下代码适用于我:

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语句(格式化列)阻塞了第一个语句(筛选)。这有点奇怪,因为这些行本来应该是解锁的

对你有用吗


干杯

我想你会在这里找到你需要的东西:。同时看看微软对你的话题有什么看法。你好,谢谢你的建议。您在上面展示的网站让我很好地理解了当Excel工作表受到保护时可以做什么。谢谢。每个工作表都有一个
保护
对象,它有许多属性,您可以修改,就像您可以修改
范围
对象的每个属性一样
ActiveSheet.Protect
为该工作表创建一个
Protection
对象。任何工作表都不能有多个
保护
对象。因此,下一个
ActiveSheet.Protect
将删除现有对象并在其位置上建立另一个对象。这个过程给人的印象不是效率。更好的方法是修改现有的。或者至少删除现有的(
取消保护
),以免混淆代码的无辜读者。嗨,Trib-RS25_uu,非常感谢。你的代码运行得很好。非常感谢。