Трюк №90. Включение и снятие защиты паролем для всех рабочих листов Excel одновременно
К сожалению, в Excel нет стандартной возможности, которая разрешает включать и выключать защиту всех рабочих листов одновременно; однако ее можно создать при помощи простого кода.
В Excel предусмотрена защита, которую можно добавить на рабочий лист командой Рецензирование → Защитить лист (Review → Protect Sheet). Можно также указать пароль, чтобы другой пользователь не смог снять защиту листа и получить доступ к данным, не зная пароля. Иногда, однако, бывает необходимо включить или снять защиту паролем для всех рабочих листов в рабочей книге за один шаг, так как выполнение этой задачи для каждого рабочего листа по отдельности — очень скучная и долгая работа. Вот как можно упростить задачу.
Откройте рабочую книгу, в которую хотите поместить этот код, или выберите команду Файл → Открыть (File → Open) и отобразите файл Personal.xls, чтобы макрос был доступен в любой рабочей книге. Выберите команду Разработчик → Редактор Visual Basic (Developer → Visual Basic Editor) (сочетание клавиш Alt/Option+Fll) и в VBE выберите команду Insert → UserForm. Должна появиться панель инструментов Control. Если панель не открылась, выберите команду View → Toolbox.
На панели инструментов выберите текстовое поле (TextBox, обозначенное как ab|). Щелкните форму UserForm, чтобы добавить на нее текстовое поле. Поместите поле в левый верхний угол формы и отрегулируйте его размер. Удостоверьтесь, что текстовое поле выделено, и выберите команду View → Properties (клавиша F4). Прокрутите список в окне Properties для этого текстового поля, пока не увидите пункт PasswordChar, и в белом поле справа введите звездочку (*); На панели инструментов выберите элемент CommandButton, щелкните форму UserForm и поместите командную кнопку в правом верхнем углу формы.
Не снимая выделения кнопки CommandButton, выберите команду View → Properties (клавиша R). Прокрутите список в окне Properties для командной кнопки, пока не увидите пункт Caption, и в белом поле справа введите текст ОК. Если вы пользуетесь Excel 97, прокрутите еще дальше до пункта TakeFocusOnClick и выберите для этого свойства значение False. Теперь выделите форму UserForm и в окне Properties для нее найдите пункт Caption. Измените значение этого свойства на Protect/Unprotect all sheets.
Выберите команду View → Code (клавиша F7) и введите код, показанный в листинге 7.16.
1 2 3 4 5 6 7 8 9 10 11 12 | //Листинг 7.16 Private Sub CommandButtonl_Click() Dim wSheet As Worksheet For Each wSheet In Worksheets If wSheet.ProtectContents = True Then wSheet.Unprotect Password:=TextBox1.Text Else wSheet.Protect Password:=TextBox1.Text End If Next wSheet Unload me End Sub |
Этот код обрабатывает все рабочие листы активной рабочей книги. Если один из них защищен, он снимает защиту, используя пароль, который вы ввели в текстовое поле. Если защита рабочего листа уже снята, макрос защищает его, используя пароль в текстовом поле. Теперь выберите команду Insert → Module и введите код из листинга 7.17. Он необходим, чтобы открыть форму UserForm. Закройте окно, чтобы вернуться в Excel.
1 2 3 4 | //Листинг 7.17 Sub ShowPass() UserForm1.Show End Sub |
Выберите команду Разработчик → Макросы (Developer → Macros) (сочетание клавиш Alt/Option+F8). Выберите ShowPass и щелкните кнопку Параметры (Options), чтобы назначить сочетание клавиш. Этот макрос снимет защиту всех защищенных рабочих листов и защитит незащищенные рабочие листы.
Так как этот макрос не запрашивает подтверждения пароля, необходимо вводить его точно. Иначе вы можете обнаружить, что одна опечатка смогла спрятать от вас все ваши электронные таблицы.
Если вы защищаете содержимое только от себя, следующий макрос позволит выполнять те же задачи с пустым паролем (листинг 7.18).
1 2 3 4 5 6 7 8 9 10 11 12 13 | //Листинг 7.18 Option Explicit Sub ProtectJJnprotect() Dim wSheet As Worksheet For Each wSheet In Worksheets With wSheet If .ProtectContents = True Then .Unprotect Passwords="" Else .Protect Password="" End If |
Хотя это не очень безопасно, этот макрос, безусловно, удобен.