Word 2007密码保护单个单词

时间:2011-09-15 05:18:32

标签: ms-word word-2007

是否可以在word文档中的单个单词上设置密码?

我想要的是从我们的IT结构中编写系统文档。我也想把密码放在文档中。现在我希望您必须输入“MASTER”密码才能解锁文档中的密码。如果您没有输入密码,则文档中的密码应该是不可见的或类似的。

这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。为了完成这项工作,我们必须结合使用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用户可以在任何给定时间正常显示隐藏文本,因此我们还需要控制此功能。通过创建包含为截获的命令命名的子例程的模块,可以拦截大多数菜单和功能区命令。命名子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有一个隐藏文本选项,可以单独显示Show All选项。此外,可以通过打印选项打印隐藏文本。我在上面AddProtection添加了代码以关闭这些设置。

进一步测试还显示,Word 2007中的用户可以通过更改显示所有格式标记手动进入 Office Orb |选项|显示以显示隐藏文本手动隐藏文字选项。为避免这种情况,需要创建功能区自定义并使用文档加载。

最后,值得注意的是,虽然为了使它完成这样的任务而将Word弯曲到一个人的意愿是非常有趣的,但保护级别不如单独加密密码然后在显示之前不加密。内容甚至使用Word的文档密码功能来加密文档的全部内容。