是否可以在word文档中的单个单词上输入密码?
我想要的是从我们的 IT 结构中编写系统文档。我也想将密码放入文档中。现在我希望您必须输入“MASTER”密码才能解锁文档内的密码。如果您不输入密码,文档内的密码应该是不可见的或类似的东西。
那可能吗?
是的,这是可能的。为了完成这项工作,我们必须结合使用 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 的文档密码功能对文档的全部内容进行加密。