0

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

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

那可能吗?

4

1 回答 1

1

是的,这是可能的。为了完成这项工作,我们必须结合使用 Word 固有的文档保护、隐藏文本属性和一些 VBA 技巧。

首先,将文档中的所有密码格式化为隐藏文本。(对于那些不熟悉的人,隐藏的文本只有在 Show/Hide 功能设置为 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 用户通常可以在任何给定时间显示隐藏文本,所以我们还需要控制此功能。大多数菜单和功能区命令可以通过创建一个模块来拦截,该模块包含以拦截命令命名的子例程。命名 SubShowAll将允许我们控制此功能,并且仅在输入密码时显示隐藏文本:

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 中的模块,选择Project Properties,然后在 Protection 选项卡上分配一个单独的密码。这将阻止高级用户获取嵌入式密码或更改代码。

剩下要做的就是在 Word 中创建一个 QAT 按钮(仅在本文档中可见)并将RemoveProtectionsub 分配给它。每当打开文档时,密码将被隐藏并防止编辑,但可以通过单击 QAT 按钮并输入正确的密码来显示。

编辑

当我第一次回答这个问题时,我没有考虑到 Word 有一个隐藏的文本选项,可以与 Show All 选项分开打开。此外,可以通过打印选项打印隐藏的文本。我在AddProtection上面添加了代码来关闭这些设置。

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

最后,值得注意的是,虽然为了完成这样的任务而将Word屈从于自己的意愿是非常有趣的,但保护程度不如单独加密密码,然后在泄露内容之前解密,甚至使用 Word 的文档密码功能对文档的全部内容进行加密。

于 2011-09-16T04:42:52.287 回答