是否可以在单词文档中的单个字上设置密码?Word 2007单字密码保护
我想要的是从我们的IT架构编写系统文档。我也想把密码放在文档中。现在我希望你必须输入一个“MASTER”密码才能解锁文档中的密码。如果您没有输入密码,文档中的密码应该是不可见的或类似的。
这可能吗?
是否可以在单词文档中的单个字上设置密码?Word 2007单字密码保护
我想要的是从我们的IT架构编写系统文档。我也想把密码放在文档中。现在我希望你必须输入一个“MASTER”密码才能解锁文档中的密码。如果您没有输入密码,文档中的密码应该是不可见的或类似的。
这可能吗?
是的,这是可能的。要做到这一点,我们必须结合Word的内在文档保护,隐藏文本属性和一些VBA技巧。
首先,将文档中的所有密码格式化为隐藏文本。 (对于那些不熟悉的人,隐藏文本只有在显示/隐藏功能设置为真时才可见)。
然后添加代码以确保隐藏文本不会被显示,并且保护文档不被编辑每当文档打开时:
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用户在任何给定时间都可以正常显示隐藏文本,所以我们还需要控制此功能。大多数菜单和功能区命令都可以通过创建一个包含为拦截命令命名的子例程的模块来拦截。命名一个子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中单击鼠标右键,选择项目属性,和保护选项卡上指定一个单独的密码。这将阻止高级用户获得嵌入密码或更改代码。
剩下要做的就是在Word中创建一个QAT按钮(仅对本文档可见)并将RemoveProtection
分配给它。无论何时打开文档,密码都会隐藏起来,并且不会被编辑,但是可以通过点击QAT按钮并输入正确的密码来显示。
编辑
当我第一次回答这个问题,我没有考虑到Word有可以在separateley打开从显示所有选项隐藏文本选项。另外,可以通过打印选项打印隐藏的文本。我在上面的AddProtection
中添加了代码来关闭这些设置。
进一步测试还透露,在Word 2007中,用户可以手动进入办公室球|选项|显示手动更改显示所有格式标记或隐藏文字选项,揭示隐藏的文本。为了避免这种情况,需要创建一个功能区自定义并加载文档。
最后,值得注意的是,虽然为了完成像这样的任务而将Word屈服于自己的意愿是非常有趣的,但是保护级别不如单独加密密码然后在揭示之前解密内容甚至使用Word的文档密码功能来加密文档的全部内容。