Заблокировать доступ к определённому листу книги

Запаролить только один лист файла Excel

Стандартная защита умеет только блокировать ячейки на отдельно взятом листе, либо операции с листами, причём со всеми разом, что в работе бывает крайне неудобно.

Сейчас научимся защищать паролем доступ к одному листу файла, но чтобы с другими можно было свободно работать - вставлять, удалять, копировать и т.д.

Стандартные команды умеют:

А мы хотим заблокировать доступ только к одному листу, в идеале - паролем.

План действий.

1. СКАЧАЙТЕ себе мой файл, разрахивируйте.

2. В файле уже живёт макрос, который вынуждает Вас при открытии файла включить макросы (нажмите ALT+F11 и перейдите в модуль ThisWorkbook либо Эта книга, он там).

Логика следующая - при закрытии файла скрываются все рабочие листы и отображается служебный, предлагающий включить макросы.

При открытии файла, если макросы включены, то автоматически служебный лист скрывается, рабочие отображаются, но если макросы не включить, то и рабочих листов нет. В общем, выхода у пользователя нет, придётся нажать кнопку "Включить содержимое" ))

3. Попробуйте перейти на лист Секрет и файл запросит пароль. Пробуйте - при неверном вводе файл будет создавать новый лист и отправлять Вас туда. Но если ввести 111, то на листе Секрет Вы и останетесь.

4. В мой файл перебросьте листы из своей рабочей книги. Мой файл можете переименовать, как угодно, только расширение оставьте прежним.

5. Нажмите ALT+F11 и двойныйм щелчком по модулю листа Секрет перейдите в него. В правой части отобразится текст волшебного макроса.
Пароль измените на свой. Утешительный текст тоже можете переписать. Или же вообще выделите весь код этого макроса и скопируйте его в модуль того листа, который хотите заблокировать, а из текущего модуля удалите.

Вот и всё.

Коллеги, мой онлайн курс «Макросы на VBA с нуля» в Вашем полном распоряжении в любой момент, чтобы Вы диктовали Excel свои правила работы :)

 

Код макроса, скрывающего все листы при закрытии файла.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = False
'отобразить справочный лист
Worksheets(1).Visible = True
'остальные скрыть
For i = 2 To Worksheets.Count
Worksheets(i).Visible = 2
Next i
Application.EnableEvents = True
End Sub

Код макроса, отображающего листа при открытии файла.

Private Sub Workbook_Open()
Application.EnableEvents = False
'отобразить рабочие листы
For i = 2 To Worksheets.Count
Worksheets(i).Visible = True
Next i
'скрыть справочный лист
Worksheets("1").Visible = 2
Application.EnableEvents = True
End Sub

Код макроса, запрашивающего пароль при переходе на заблокированный лист.

Private Sub Worksheet_Activate()
PS = InputBox("Для доступа к этому листу введите пароль")
If PS = 111 Then 'вместо 111 введите свой пароль (текстовый - в кавычках)
Exit Sub
Else
Set SH = Worksheets.Add 'вставить лист, на который отправить пользователя
'Текст в кавычках в строке ниже можете изменить или вообще удалите следующую строку.
SH.Range("A1") = "Пароль введён неверно, вот Вам другой лист - новый, чистый (в утешение)."
End If

End Sub