2011-09-15 81 views
0

是否可以在單詞文檔中的單個字上設置密碼?Word 2007單字密碼保護

我想要的是從我們的IT架構編寫系統文檔。我也想把密碼放在文檔中。現在我希望你必須輸入一個「MASTER」密碼才能解鎖文檔中的密碼。如果您沒有輸入密碼,文檔中的密碼應該是不可見的或類似的。

這可能嗎?

回答

1

是的,這是可能的。要做到這一點,我們必須結合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的文檔密碼功能來加密文檔的全部內容。