Защита страницы через VBA
Каждый кто хоть раз писал макросы, сталкивался с тем, что требуется защитить лист и формулы на нем от шаловливых ручек пользователей. При том, нужно чтобы макросы на листе работали. Самое просто решение, это перед кодом макроса, добавить это:
Worksheets("Лист1").Unprotect Password:="123"
'тут макрос делает действия
Worksheets("Лист1").Protect Password:="123"
Это будет работать, но у такого подхода есть и свои минусы. Во-первых, нужно эту конструкцию размещать в каждом макросе. Во-вторых - если будет ошибка, лист останется без защиты.
Есть другой способ
Нажмите Alt+F11
, чтобы попасть в редактор Visual Basic. Затем в левом верхнем углу в окне Project Explorer (если его не видно, то нажмите Ctrl+R) модуль ЭтаКнига (ThisWorkbook) и откройте двойным щелчком:
Вставьте этот код:
Private Sub Workbook_Open()
'включаем защиту первого листа для пользователя, но не макроса
Worksheets("Лист1").Protect Password:="123", UserInterfaceOnly:=True
'второй лист защищаем аналогично, но с возможностью пользоваться группировкой
Worksheets("Лист2").EnableOutlining = True
Worksheets("Лист2").Protect Password:="555", UserInterfaceOnly:=True
End Sub
Данный код будет автоматически запускаться при открытии файла и ставить защиту на заданные листы. Параметр UserInterfaceOnly
указывает Excel, что защита не должна работать для действий макроса, а только на операции юзера.
Второй параметр EnableOutlining
разрешает пользоваться группировкой.