我想使用Office 2007 VBA的Document.Protect自動完成保護Word文檔的註釋過程。如果文檔沒有任何保護,這可以正常工作,但一旦保護之前已經設置,就會失敗。VBA Document.Protect未設置wdProtectionType(Office 2007)
以下是一個最小的工作示例,顯示了我正面臨的錯誤(請參閱下文)。我在另一臺運行Office 2007 SP3的PC上進行了複製。即使使用空白文檔也會出現問題。
複製,使用下面的宏保存新的空白文檔後:
Sub ProtectionBugOffice2007()
' Apply a first type of locking to simulate an existing lock
RecentFiles(1).Open
If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect
ActiveDocument.Protect wdAllowOnlyFormFields
ActiveDocument.Close (wdSaveChanges)
' Now do the real test: Lock with our intended protection type
RecentFiles(1).Open
ActiveDocument.Unprotect
ActiveDocument.Protect wdAllowOnlyComments
ActiveDocument.Close (wdSaveChanges)
' Validate!
RecentFiles(1).Open
If ActiveDocument.ProtectionType = wdAllowOnlyComments Then
MsgBox "Success!"
Else
MsgBox "Failure! Should be " & wdAllowOnlyComments & " but is " & ActiveDocument.ProtectionType
End If
ActiveDocument.Close
End Sub
以前的事情調查:
- 的Office 2007是最新的,與SP 3和最新的Windows更新
- 如果手動執行保護類型可以正確更改,但由於宏記錄失敗而記錄。
- 其他類型保存文檔(Document.Save或Document.SaveAs(2))
- 禁用ReadingLayout
ActiveWindow.View.ReadingLayout = False
(見Alredo的答案)的: :在Office 2007
編輯無變化
- 2015-10-23:初始問題
- 2015-10-25:添加了最小工作示例。
- 2015-10-25:發現只有在手動或以編程方式設置保護類型後,才能更改該保護類型。
- 2015年10月26日:提供的賞金
我做了幾個讀數檢查保護功能,但你似乎把它做好...而且你的代碼對我來說工作正常......我只會建議你使用一個對象來更好地控制引用,因爲'ActiveDocument'可以在運行時輕鬆更改。 – R3uK
感謝您的幫助!它適合你嗎?哪個Office版本? –
2010 64位,工作就像一個魅力...當我重試一個受保護的文件,並得到一個錯誤消息說這是不可能的,所以我不能理解你的問題可以在哪裏... – R3uK