2016-10-14 5 views
0

У меня есть книга с 4 листами сотрудника с течением времени. Первые 3 листа, где данные добавляются другими. На четвертом листе собраны данные. На этом 4-м листе я включил автоматический макрос сортировки, чтобы постоянно изменять порядок данных, которые у меня есть на нескольких разных таблицах. Id нравится защищать этот 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

При защите листа, попробуйте включить «Сортировка» в списке опций (возможно, придется прокрутить вниз, чтобы увидеть его), которые появляются в диалоговом окне Protect Sheet. – tigeravatar

+0

Вы можете снять защиту листа в своем макросе сортировки, а затем повторно защитить его в конце. BTW 'On Error Resume Next' остается в силе до тех пор, пока вы его не отмените - вам нужна только одна из этих строк ... –

ответ

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 
Смежные вопросы