# Защита страницы через VBA

Каждый кто хоть раз писал макросы, сталкивался с тем, что требуется защитить лист и формулы на нем от шаловливых ручек пользователей. При том, нужно чтобы макросы на листе работали. Самое просто решение, это перед кодом макроса, добавить это:

```vba
Worksheets("Лист1").Unprotect Password:="123"
'тут макрос делает действия
Worksheets("Лист1").Protect Password:="123"
```

Это будет работать, но у такого подхода есть и свои минусы. Во-первых, нужно эту конструкцию размещать в каждом макросе. Во-вторых - если будет ошибка, лист останется без защиты.

## Есть другой способ

Нажмите `Alt+F11`, чтобы попасть в редактор Visual Basic. Затем в левом верхнем углу в окне Project Explorer (если его не видно, то нажмите Ctrl+R) модуль ЭтаКнига (ThisWorkbook) и откройте двойным щелчком:

![](../../../images/other/office/excel_vba_01.png){ loading=lazy }


Вставьте этот код:

```vba
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` разрешает пользоваться группировкой.
