2015-08-11 2 views
1

Я записал следующий код VBA, который скрывает/скрывает строки, а затем сортирует по событию workheet_Activate, в кратчайшие сроки :). Только одна вещи, рабочий лист должен быть защищен, и этот код отказывается быть выполнен в защищенном листе и получил сообщение об ошибке:Разрешить код VBA внутри защищенного рабочего листа

«ошибка время выполнения 1004» Вы не можете использовать этот воздает на защищенной лист ...»

Не могли бы вы посоветовать, как мы можем защитить лист и дать этот код в то же самое время?

Sub HIDESORT() 
    ActiveSheet.Range("$A$10:$K$500").AutoFilter Field:=7, Criteria1:=">0", _ 
     Operator:=xlAnd 
    ActiveWorkbook.Worksheets("Control Implementation Plan").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Control Implementation Plan").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("G10:G500"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Control Implementation Plan").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End Sub 
+1

, когда вы защищаете рабочий лист вы, чтобы позволить пользователям возможность скрыть/показать клетки, установив флажок позволяет 'формат columns'. Попробуйте добавить этот сегмент к вашему коду 'ActiveSheet.Protect DrawingObjects: = True, Contents: = True, Сценарии: = True, AllowFormattingColumns: = True' – psychicebola

+0

Отлично работает;) спасибо –

ответ

1
ActiveSheet.Protect UserInterfaceOnly:=True 
+1

@AhmedElAmrani Обратите внимание, что если вы хотите предотвратить другие разделы кода от обновления листа (возможно, в качестве отказоустойчивого кода, который предотвратил бы ошибочное выполнение кода, чего вы не хотите), вы могли бы вместо этого отключить защиту в начале суб, а затем снова включить его в конце к югу. В противном случае этот метод, скорее всего, будет лучше для ваших целей. –

+0

@ Grade'Eh'Bacon да, это звучит хорошо для меня, может предложить простой код для этого? –

+0

В начале: ActiveSheet.Protect - В конце: ActiveSheet.Unprotect –

0

, когда вы защищаете рабочий лист, вы должны разрешить пользователям скрывать/скрывать ячейки, установив флажок allow format columns. Попробуйте добавить этот сегмент кода

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingColumns:=True 
Смежные вопросы