2016-10-14 81 views
0

随着时间的推移,我有一个4工作表的员工工作簿。前3张是其他人添加数据的地方。第四张是数据加起来的地方。在第四张表中,我启用了一个自动排序宏来不断重新排序我在几张不同表上的数据。我喜欢保护这张第四张纸以防篡改,但是我发现只要我保护纸张,公式仍然可以使用,但是宏不会。我知道宏的工作原理,因为无论何时解除工作表的宏,宏都会再次激活。我是否需要添加一些东西给我的宏,使其在保护模式下工作,或者我只是做错了什么或这是不适用于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

当保护工作表,尝试在选项列表中启用“排序”(可能需要向下滚动才能看到它之前解锁片)出现在“保护表”对话框中。 – tigeravatar

+0

您可以取消您的排序宏中的工作表,然后重新进行保护。顺便说一句,“在错误恢复下一个”仍然有效,直到你取消它 - 你只需要其中一行...... –

回答

0

你有一个朋友可以使用。这位朋友叫做userinterfaceonly

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

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

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

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 
相关问题