Для документов Word и отдельных их разделов можно установить защиту от изменений их пользователем непосредственно, т.е. изменения в документ могут быть внесены только с помощью средств, предоставляемых пользователю разработчиком приложения (с помощью команд меню, макросов, диалоговых окон и форм с размещенными на них элементами управления).
Для организации защиты содержания документа, его структуры используется команда Установить защиту… из меню Сервис. В диалоговом окне этой команды можно задать требования по защите документа.
Кнопка Разделы… диалогового окна дает возможность определить, к каким разделам будут применяться устанавливаемые правила защиты. Доступ к средствам защиты можно защитить паролем.
После установки защиты в меню Сервис появляется команда Снять защиту.
Установка защиты автоматически влечет за собой ограничение прав доступа пользователей к командам меню и панелей инструментов. Пользователи получают лишь ограниченные права на выполнение операций в документе (предоставляемые пользователю возможности устанавливаются с помощью переключателя в диалоговом окне).
Для редактирования документа, ввода информации, т.е. для предоставления доступа к некоторым заблокированным объектам в документе при установленной защите требуется использовать специальные средства:
– программный код, который по необходимости снимает и снова устанавливает защиту;
– замена встроенных команд Word пользовательскими командами, добавленными в меню шаблона;
– процедуры, расширяющие или замещающие часть функциональных возможностей Word.
В любом случае, с защищенными объектами необходимо работать с помощью программного кода.
Для установки защиты документа используется метод Protect объекта Document. В качестве аргументов при вызове метода передаются значения, представляющие те же настройки, которые можно было выполнить в диалоговом окне команды установки защиты. Правило вызова метода следующее:
Документ.Protect (Type, NoReset, Password)
Параметр Type является обязательным. Он специфицирует тип защиты документа и может принимать следующие значения констант WdProtectionType: wdAllowOnlyComments, wdAllowOnlyFormFields, wdAllowOnlyRevisions или wdNoProtection.
Аргумент NoReset является необязательным. Если он равен False, то значения полей в форме принимают значения по умолчанию. Значение True сохраняет текущие значения полей. Этот аргумент используется только в случае, когда для предыдущего параметра устанавливается значение wdAllowOnlyFormFields, для других типов защиты значение этого аргумента игнорируется.
Параметр Password не является обязательным. Он требуется, чтобы снять защиту с документа.
Если документ уже защищен, вызов этого метода приведет к ошибке. Для проверки, установлена ли защита и каков ее режим, можно обратиться к свойству ProtectionType. Значением этого свойства может быть значение одной из констант WdProtectionType: wdAllowOnlyComments, wdAllowOnlyFormFields, wdAllowOnlyRevisions или wdNoProtection. Это свойство доступно только для чтения. Ниже приведен пример проверки защиты и ее установки для документа:
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyComments
End If
Этот код устанавливает для активного документа, если он еще не защищен, защиту (пользователю разрешается только работа с примечаниями).
В следующем примере с активного документа, если он защищен, снимается защита:
If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect End If
Прием замещения заблокированных команд состоит в следующем: сначала нужная команда удаляется из меню, а затем добавляется вновь. Этот прием «обманывает» Word, обеспечивая переназначение обработчика недоступной команды. (Работа с панелями команд, меню и панелями инструментов рассматривалась выше.) Вместо заблокированных встроенных команд, можно написать свои процедуры, разместив соответствующие им кнопки на пользовательских панелях инструментов или в пользовательских меню.
Например, следующую процедуру можно использовать для обновления оглавления: