2011-09-15 65 views
1

我正在使用vbscript以編程方式運行word文檔列表,打開每個文檔,修改它,然後使用ms word 2010保存它。我的問題是存在保護和列表中未受保護的文件。當我到達受保護的文檔時,出現此錯誤:此方法或屬性不可用,因爲該對象引用文檔的受保護區域。如何以編程方式檢查word文檔上的保護vbscript

所以我做了一些研究,發現MS網站上的驗證碼

If objDoc.ProtectionType <> wdNoProtection Then 
       objDoc.Unprotect 
End if 

現在的問題是一個新的錯誤:因爲文件已不受保護的解除方法或屬性是不可用。有沒有另一種方法來檢查文檔是否受到保護或無保護,當您知道列表中會出現這兩種情況時,以避免錯誤?

+1

你定義wdNoProtection? (比如「Const wdNoProtection = <從Docs/Debug輸出獲得的正確值」) –

+0

不,我是一個java開發人員,正在試圖用vbscript完成一些任務,我會嘗試。 –

+0

那麼工作!我didn如果你把你的答案放下,我會標記它的答案。謝謝你,詹姆斯 –

回答

4

如果您使用VBScript自動化MS Office應用程序(並以VBA示例代碼爲出發點),則可能會忽略定義在VBA中預定義的wd *,xl *或ad(?)*常量的必要性,但在VBScript中丟失。使用文檔和/或調試輸出添加如下行:

Const wdNoProtection = <correct value> 

到您的腳本。

如果你用Option Explicit開始你的腳本,並且完全避免邪惡的全局On Error Resume Next或者至少禁用它直到程序被測試,你將不會錯過任何這些野獸。

更好的方法是將腳本編寫爲.wsf文件。 <reference>標籤'包括'的定義(所以你不能責怪一個不正確的Const行)。

POC /演示代碼:

<?xml version="1.0" standalone="yes" encoding="iso-8859-1" ?> 
<package> 
<job id="QEC"> 
    <reference object="Excel.Sheet" reference="true"/> 
    <script language="VBScript"> 
    <![CDATA[ 
' ############################################################################ 
    a = inputbox ("Name of an Excel Constant?") 
    msgbox a & " = " & eval(a) 
' ############################################################################ 
    ]]> 
    </script> 
</job> 
</package> 
相關問題