一旦工作表受到保护,VBA 就会停止工作

VBA stops working once the sheet is protected

提问人:starkiwi26 提问时间:10/14/2022 更新时间:10/14/2022 访问量:34

问:

我有一个带过滤器的桌子。 我编写了简单的 VBA,以便当用户选择不同的选项时,VBA 将选择过滤器并自动对表格进行排序。它工作得很好。 然后,我隐藏、锁定和保护工作表以保持简单并防止用户更改公式。但是,一旦工作表受到保护(我勾选并授予了所有操作的权限),VBA仍然无法运行。如果我切换回“未受保护”,一切将再次正常。 我被困住了,希望其他专家能提出建议。 非常感谢!

简单的VBA如下:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Range("BF1").Value = "Highest $" Then
        Range("A5:CK288").Sort Key1:=Range("BG5:BG288"), Order1:=xlDescending
   End If
   If Range("BF1").Value = "Nearest end" Then
        Range("A5:CK288").Sort Key1:=Range("BC5:BC288"), Order1:=xlAscending
   End If
   If Range("BF1").Value = "Customer" Then
        Range("A5:CK288").Sort Key1:=Range("BE5:BE288"), Order1:=xlDescending
   End If
   If Range("BF1").Value = "Country" Then
        Range("A5:CK288").Sort Key1:=Range("BD5:BD288"), Order1:=xlDescending
   End If
   If Target.Address = Range("BF2").Address Then
        If Range("BF2") = "All" Then
            Range("A5").AutoFilter Field:=56
        Else
            Range("A5").AutoFilter Field:=56, Criteria1:=Range("BF2").Value
        End If
   End If
   If Target.Address = Range("BF3").Address Then
        If Range("BF3") = "All" Then
            Range("A5").AutoFilter Field:=54
        Else
            Range("A3").AutoFilter Field:=54, Criteria1:=Range("BF3").Value
        End If
   End If
End Sub
VBA 隐藏 保护 已锁定

评论

1赞 Ken White 10/14/2022
然后我隐藏、锁定和保护床单——你认为这个词在那句话中是什么意思?如果它被锁定,则无法对其进行排序或过滤 - 它已被锁定。

答:

0赞 Andrew 10/14/2022 #1

保护工作表时,有一些选项可以允许使用过滤器。勾选自动过滤器复选框。您还可以为单个单元格设置保护。我的英文翻译可能已关闭,但右键单击单元格,选择“设置单元格格式(?)”,然后在“保护”选项卡上,取消选中“锁定”。请参阅此链接

评论

0赞 starkiwi26 10/15/2022
我勾选了自动过滤器复选框,实际上我勾选了所有框。尽管如此,当我保护工作表时,VBA 仍然停止工作。如果我取消保护工作表,一切将再次起作用。