我有一个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