2016-10-14 112 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 
相關問題