如何以编程方式检查word文档vbscript上的保护

时间:2011-09-15 14:41:10

标签: vbscript ms-word ms-office word-2010

我正在使用vbscript以编程方式运行word文档列表,打开每个文档,修改它,然后使用ms word 2010保存它。我的问题是列表中有受保护和不受保护的文档。当我到达受保护的文档时,我收到此错误:此方法或属性不可用,因为该对象引用了文档的受保护区域。

所以我做了一些研究,并在ms网站上找到了这段代码:

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

现在问题是一个新错误:unprotect方法或属性不可用,因为文档已经不受保护。有没有另一种方法可以检查文档是受保护还是不受保护,当您知道列表中有两个文件时,是否可以避免错误?

1 个答案:

答案 0 :(得分:4)

如果使用VBScript自动化MS Office应用程序(并使用VBA示例代码作为起点),您可能会忽略定义VBA中预定义的wd *,xl *或ad(?)*常量的必要性,但在VBScript中丢失了。使用Docs和/或Debug输出添加如下行:

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>