Материал: Программирование на языке Visual Basic для приложений. Подвальный С.Л., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Вприложениях Word и Excel имеются специальные средства защиты, которые используются не для того, чтобы защитить документ от несанкционированного доступа, а для того, чтобы защитить данные в документе от случайного искажения. Эти средства устанавливают пароль защиты при попытке изменения определенных данных в документе.

ВWord таковых три и устанавливаются они с помощью команды Сервис > Установить защиту. При этом появляется диалоговое окно, показанное на рис. 10.2.

Рис. 10.2. Диалоговое окно "Защита документа"

Переключатели в этом диалоговом окне означают следующее:

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

158

-переключатель вставки примечаний означает, что единственное изменение, которое можно сделать, — это вставить примечание;

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

Если выбран режим защиты полей формы, то в случае наличия в документе двух и более разделов становится доступной кнопка Разделы, нажатие на которую приводит к отображению диалогового окна Защита раздела, в котором можно выбрать для защиты необходимые разделы (по умолчанию защищаются все разделы).

Excel 2002 имеет четыре средства защиты данных внутри рабочей книги (на одно больше, чем в предыдущей версии Excel 2000), которые устанавливаются с помощью меню команды

> Сервис > Защита.

В этом меню можно найти четыре команды, описание которых приводится ниже.

Команда Защитить лист позволяет защитить данные во всех ячейках рабочего листа от изменения за исключением тех, для которых на вкладке Защита диалогового окна Формат ячеек сброшен флажок Защищаемая ячейка. При ее вызове отображается диалоговое окно Защита листа (рис. 11.3), в котором вводится пароль защиты, а в списке Разрешить всем пользователям этого листа устанавливаются допустимые действия пользователя при работе с рабочим листом.

Команда Защитить книгу позволяет защитить структуру рабочей книги (т. е. количество, наименование и расположение рабочих листов) от изменения. Этот режим, в отличие от предыдущего, не требует обязательного задания пароля.

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

159

Рис. 10.3. Диалоговые окна "Защита листа" для Office XP, 2000

Команда Защитить книгу и дать общий доступ позво-

ляет превратить книгу в общую, к которой возможен одновременный доступ нескольких пользователей (при этом некоторые операции, например, изменение внедренных объектов, запрещаются).

Вкоде VBA перечисленным способам защиты данных соответствуют методы protect и Unprotect документов приложений Word и Excel с передачей в них подходящих параметров, устанавливающих необходимые режимы защиты.

Всвязи с тем что, по сравнению с Excel 2000, в приложении Excel 2002 введено больше режимов защиты рабочего листа, в этой версии в объектную модель Excel был добавлен объект Protection со свойствами, полностью повторяющими все варианты защиты рабочего листа, которые перечислены в списке Разрешить всем пользователям этого листа диалого-

вого окна Защита листа. Этот объект является подчиненным объекту worksheet, представляющему в коде VBA рабочий лист.

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

If ActiveSheet.Protection.AllowInsertingColumns = False Then

160

ActiveSheet.Protect AllowInsertingColumns:=True MsgBox "Введите столбцы между 1 и 3"

Else

MsgBox "Введите столбцы между 1 и 3"

End If

Для тестирования приведенного фрагмента рабочий лист должен быть защищен ранее выполнением команды protect рабочего листа:

ActiveSheet.Protect.

ВExcel 2002 введена новая возможность задания диапазонов ячеек на защищенном листе, содержимое которых пользователь может изменять, если только он введет правильный пароль. Эта возможность реализована в команде Разрешить изменение диапазонов, но ее следует выполнять до установки режима защиты листа. Excel 2000 не предоставлял такую возможность.

Вотображаемом этой командой диалоговом окне Разрешить изменение диапазонов следует создать и занести в спи-

сок Диапазоны защищенного листа, разблокируемые паро-

лем один или несколько именованных диапазонов, содержимое ячеек которых можно будет изменять при защищенном листе, если ввести правильный пароль (рис. 10.4).

Рис. 10.4. Диалоговое окно "Разрешить изменение диапазонов"

161

Для создания диапазона следует нажать кнопку Создать и в диалоговом окне Новый диапазон (рис. 10.5) создать диапазон ячеек и ввести пароль для доступа к режиму замены содержимого его ячеек при защищенном рабочем листе.

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

Рис. 10.5. Создание нового диапазона

Задание разблокируемых паролем диапазонов в коде VBA можно выполнить с помощью метода Add семейства AllowEditRanges объекта protection. Это семейство хранит каждый диапазон в виде объекта AllowEditRange.

В приведенном ниже фрагменте кода создается диапазон, изменяемый по паролю.

Dim wksOne As Worksheet

Set wksOne = Application.ActiveSheet 'Снятие защиты рабочего листа wksOne.Unprotect

'Establish a range that can allow edits 'on the protected worksheet

wksOne.Protection.AllowEditRanges.Add _ Title:="Classified", _

162

Источник: https://studfile.net/preview/16565567/