Трюк №90. Включение и снятие защиты паролем для всех рабочих листов Excel одновременно


Трюк №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

Хотя это не очень безопасно, этот макрос, безусловно, удобен.

16.02.20135985

»Трюки с макросами » Трюк №90. Включение и снятие защиты паролем для всех рабочих листов Excel одновременно




Читайте ранее:
Трюк №89. Как добавить элемент управления Календарь в любую рабочую книгу Excel

Для гарантии правильности ввода дат пользователями элемент управления Excel Календарь (Calendar) может упростить ситуацию как для вас, так и для...

Закрыть