В этом руководстве вы узнаете все о защите листов Excel в VBA - как защитить или снять защиту листов в Excel.
Снять защиту листа Excel без пароля
Чтобы снять защиту с рабочего листа, который не защищен паролем, используйте эту простую строку кода:
1 | Листы ("Лист1"). Снять защиту |
Снять защиту листа Excel с помощью пароля
Чтобы снять защиту с рабочего листа, защищенного паролем, вы также должны ввести пароль:
1 | Рабочие листы ("Лист1"). Снять защиту "Пароль" |
Снять защиту с листа - утерян пароль
Чтобы снять защиту с листа, не зная пароля, необходимо использовать надстройку для восстановления пароля.
Защитить рабочие листы
Защита рабочего листа позволяет заблокировать определенные аспекты листа от редактирования.
Это меню находится в На главную> Формат> Защитить лист или щелкнув правой кнопкой мыши имя вкладки Лист:
Чаще всего это используется для защиты «заблокированных» ячеек от редактирования, позволяя конечному пользователю редактировать только определенные ячейки.
Вы можете заблокировать ячейки, выбрав их и открыв Вкладка Защита принадлежащий Меню форматирования ячеек (CTRL + 1).
Вы также можете запретить пользователю изменять структуру рабочего листа (вставку, удаление или изменение размера строк и столбцов), или от взаимодействия с автофильтрами и многого другого.
Защитить рабочий лист - без пароля
Возможно, вы захотите защитить рабочий лист без ввода пароля. Это предотвратит случайное изменение рабочего листа и предоставит пользователю доступ для внесения изменений при желании.
1 | Листы ("Лист1"). Защитить |
Защитить рабочий лист - Защита паролем
1 | Рабочие листы («Лист1»). Защитить «Пароль» |
Защитить настройки рабочего листа
Приведенные выше примеры защитят рабочие листы со стандартными настройками защиты. Вместо этого вы можете настроить то, что защищено:
12345 | Рабочие листы ("Sheet1"). Защитить пароль: = strPassword, DrawingObjects: = True, Contents: = True, Scenarios: = True, _UserInterfaceOnly: = True, AllowFormattingCells: = False, AllowFormattingColumns: = False, _AllowFormattingRows: = False, AllowInsertingColumns: = False, AllowInsertingRows: = False, _AllowInsertingHyperlinks: = False, AllowDeletingColumns: = False, AllowDeletingRows: = False, _AllowSorting: = False, AllowFiltering: = False, AllowUsingPivotTables: = False |
Вместо использования синтаксиса выше, я рекомендую записать макрос с желаемыми настройками (выбранными в меню «Защита рабочего листа» выше) и скопировать + вставить записанный код в вашу процедуру.
Защитить лист - разрешить VBA вносить изменения
По умолчанию при защите листа защита применяется не только к действиям пользователя, но и к операциям VBA. Если VBA попытается изменить заблокированную ячейку, вы увидите ошибку времени выполнения 1004. Чтобы избежать этого, вы можете снять защиту и повторно защитить свои рабочие листы всякий раз, когда VBA необходимо взаимодействовать с ними:
123456789 | Sub Edit_Sheet1 ()'Снять защиту Sheet1Листы ("Лист1"). Снять защиту'Сделайте что-нибудь с Sheet1'Reprotect Sheet1Листы ("Лист1"). ЗащититьКонец подписки |
Однако легко забыть снять защиту и / или повторно защитить свои рабочие листы. Это может увеличить вероятность ошибки кодирования.
Вместо этого вы можете использовать параметр UserInterFaceOnly. Если установлено значение ИСТИНА, рабочие листы будут защищены ТОЛЬКО от пользователей, а НЕ от VBA.Ваш код VBA сможет редактировать лист так же, как если бы он был разблокирован.
Два важных момента о UserInterFaceOnly:
- Этот параметр недоступен в меню «Защита рабочего листа» (показано выше). Это параметр, который необходимо определить в VBA.
- Этот параметр не сохраняется при закрытии книги. Его необходимо переопределять каждый раз при открытии книги.
Итак, чтобы установить свойство UserInterFaceOnly, вы должны поместить следующую процедуру события Workbook_Open в модуль ThisWorkbook:
1234567 | Частная вспомогательная книга_Open ()Dim ws как рабочий листДля каждого ws в ThisWorkbook.Worksheetsws.Protect UserInterfaceOnly: = TrueСледующий wsКонец подписки |
Workbook_Open - это специальная процедура события, которая запускается каждый раз при открытии книги. Его необходимо разместить в модуле ThisWorkbook. В качестве альтернативы вы можете использовать процедуру события Auto_Open (здесь не рассматривается).
Макрос "Снять защиту со всех листов"
Этот макрос снимает защиту со всех листов в книге:
123456789 | 'Снять защиту со всех листовSub UnProtectAllSheets ()Dim ws как рабочий листДля каждого ws в листахws.Unprotect "пароль"Следующий wsКонец подписки |
Макрос Защитить все листы
Этот макрос защитит все листы в книге:
123456789 | 'Защитить все рабочие листыSub ProtectAllSheets ()Dim ws как рабочий листДля каждого ws в листахws.Protect "пароль"Следующий wsКонец подписки |