是否可以在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 按钮(仅在本文档中可见)并将RemoveProtection
sub 分配给它。每当打开文档时,密码将被隐藏并防止编辑,但可以通过单击 QAT 按钮并输入正确的密码来显示。
编辑
当我第一次回答这个问题时,我没有考虑到 Word 有一个隐藏的文本选项,可以与 Show All 选项分开打开。此外,可以通过打印选项打印隐藏的文本。我在AddProtection
上面添加了代码来关闭这些设置。
进一步的测试还显示,Word 2007 中的用户可以手动进入Office Orb|选项|显示,通过手动更改显示所有格式标记或隐藏文本选项来显示隐藏文本。为避免这种情况,需要创建功能区自定义并将其与文档一起加载。
最后,值得注意的是,虽然为了完成这样的任务而将Word屈从于自己的意愿是非常有趣的,但保护程度不如单独加密密码,然后在泄露内容之前解密,甚至使用 Word 的文档密码功能对文档的全部内容进行加密。