保护工作簿中启用宏的工作表



我有一个4页的员工工作簿。前3张表是其他人添加数据的地方。第四张表格是数据相加的地方。在这第4张表中,我启用了一个自动排序宏来不断地对几个不同表上的数据重新排序。我想保护这第4页,使其防篡改,但我发现,每当我保护工作表,公式仍然有效,但宏不。我知道宏工作,因为每当我取消保护工作表宏再次激活。我是否需要添加一些东西到我的宏,使其在保护模式下工作,或者我只是做错了什么,或者这是不能与excel 2010?这是我当前使用的宏:

Private Sub Worksheet_Activate()
On Error Resume Next
    Range("c1").Sort Key1:=Range("c2"), _
      Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom
On Error Resume Next
    Range("k1").Sort Key1:=Range("k2"), _
      Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom
On Error Resume Next
    Range("o1").Sort Key1:=Range("o2"), _
      Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom
On Error Resume Next
    Range("s1").Sort Key1:=Range("s2"), _
      Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom
End Sub

你有一个可以一起工作的朋友。这个朋友叫userinterfaceonly

在代码的开头,添加以下内容:

    ActiveSheet.Unprotect Password:="Whatever"
    ActiveSheet.Protect _
        Password:= "Whatever", _
        userinterfaceonly:=True

这将删除表保护,然后用UserInterfaceOnly属性重新激活它,该属性允许宏进行更改,而不是由用户进行更改。不幸的是,这个属性不能保存,所以我们需要代码在文件被打开或工作表被激活时运行。

是的,你需要在调用排序函数之前解锁表格

Private Sub Worksheet_Activate()
    Set sheet = ActiveSheet
    sheet.Unprotect Password:="password"
    sheet.Range({whatever range you want}).Locked = False    
    On Error Resume Next
        Range("c1").Sort Key1:=Range("c2"), _
        Order1:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom
    On Error Resume Next
      Range("k1").Sort Key1:=Range("k2"), _
      Order1:=xlAscending, Header:=xlYes, _
      OrderCustom:=1, MatchCase:=False, _
      Orientation:=xlTopToBottom
sheet.protect Password:="password"
sheet.Range({whatever range you want}).Locked = True
End Sub

最新更新