随着时间的推移,我有一份4页的员工工作簿。前3张是其他人添加数据的地方。第四张是数据加起来的地方。在第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
答案 0 :(得分:0)
你有一个可以与之合作的朋友。这位朋友被称为userinterfaceonly
。
在代码的开头添加以下内容:
ActiveSheet.Unprotect Password:="Whatever"
ActiveSheet.Protect _
Password:= "Whatever", _
userinterfaceonly:=True
这将删除工作表保护,然后使用UserInterfaceOnly属性重新激活它,该属性允许宏进行更改,但不允许用户进行更改。遗憾的是,此属性无法保存,因此我们需要在打开文件或激活工作表时运行代码。
答案 1 :(得分:0)
是的,你需要在调用我认为的排序功能之前解锁表单
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