VBA Защитить / Снять защиту рабочих листов

В этом руководстве вы узнаете все о защите листов 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Конец подписки

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave