Да, это возможно. Чтобы это работало, мы должны использовать комбинацию встроенной в 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 Orb|Параметры|Экран, чтобы отобразить скрытый текст, изменив Показать все метки форматирования или Параметры скрытого текста вручную. Чтобы избежать этого, необходимо создать настройку ленты и загрузить ее вместе с документом.
Наконец, стоит отметить, что, хотя очень весело подчинить Word своей воле, чтобы заставить его выполнять такие задачи, уровень защиты не так хорош, как отдельное шифрование паролей, а затем расшифровка перед раскрытием содержимого или даже используя функцию пароля документа Word для шифрования всего содержимого документа.
person
joeschwa
schedule
16.09.2011