Да, это возможно.Чтобы сделать это, мы должны использовать комбинацию встроенной защиты документов Word, атрибута скрытого текста и нескольких приемов VBA.
Сначала отформатируйте все пароли в документе как скрытый текст.(Для тех, кто незнаком, скрытый текст виден только тогда, когда для функции Показать / Скрыть установлено значение true.)
Затем добавьте код, чтобы убедиться, что скрытый текст не будет отображаться, а также для защиты документа отредактируется всякий раз, когда документ открывается:
Private Sub Document_Open()
AddProtection
End Sub
Sub AddProtection()
With ActiveDocument
.ActiveWindow.View.ShowAll = False
.ActiveWindow.View.ShowHiddenText = False
.Application.Options.PrintHiddenText = False
.Protect Type:=wdAllowOnlyReading, NoReset:=True, Password:="DesiredPassword"
End With
End Sub
Поскольку пользователи Word обычно могут отображать скрытый текст в любой момент времени, нам также необходимо взять под контроль эту функцию.Большинство команд меню и ленты могут быть перехвачены путем создания модуля, содержащего подпрограммы, названные для перехваченных команд.Присвоение имени Sub ShowAll
позволит нам контролировать эту функцию и отображать скрытый текст только при вводе пароля:
Sub ShowAll()
If ActiveDocument.ProtectionType = wdAllowOnlyReading Then
'Do nothing
Else 'restore the Ribbon's toggle function
If ActiveDocument.ActiveWindow.View.ShowAll = True Then
ActiveDocument.ActiveWindow.View.ShowAll = False
Else
ActiveDocument.ActiveWindow.View.ShowAll = True
End If
End If
End Sub
Наконец, мы добавляем некоторый код, чтобы запросить у пользователя пароль, и, если он введен,правильно, отобразите ранее скрытый текст:
Sub RemoveProtection()
Dim strPassword As String
strPassword = InputBox("Enter document password.")
ActiveDocument.Unprotect Password:=strPassword
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.ActiveWindow.View.ShowHiddenText = True
End If
End Sub
После ввода всего кода VBA щелкните правой кнопкой мыши модуль в IDE, выберите Свойства проекта и назначьтеотдельный пароль на вкладке Защита.Это не позволит опытным пользователям получить доступ к встроенному паролю или изменить код.
Осталось только создать кнопку QAT в Word (которая видна только для этого документа) и назначить подпункт RemoveProtection
.к этому.При каждом открытии документа пароли будут скрыты и защищены от редактирования, но затем их можно будет открыть, нажав кнопку QAT и введя правильный пароль.
РЕДАКТИРОВАТЬ
Когда я впервые ответил на этот вопрос, я не учел, что в Word есть опция скрытого текста, которую можно включить отдельно от опции Показать все.Кроме того, скрытый текст можно распечатать с помощью опции печати.Я добавил код в AddProtection
выше, чтобы отключить эти настройки.
Дальнейшее тестирование также показало, что пользователь в Word 2007 может вручную перейти в Сфера Office | Параметры | Показать , чтобы открытьскрытый текст, изменив Показать все метки форматирования или Скрытый текст вручную.Чтобы избежать этого, необходимо создать настройку ленты и загрузить ее вместе с документом.
Наконец, стоит отметить, что, хотя очень интересно сгибать Word по собственному желанию, чтобы он мог выполнять такие задачи, какэто означает, что уровень защиты не так хорош, как шифрование паролей отдельно, а затем дешифрование перед раскрытием содержимого или даже использование функции пароля документа Word для шифрования всего содержимого документа.