1

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

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

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

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

4

1 回答 1

4

如果您使用 VBScript 自动化 MS Office 应用程序(并使用 VBA 示例代码作为起点),您可能会忽略定义 wd*、xl* 或 ad(?)* 常量的必要性,这些常量在 VBA 中预定义,但在VB脚本。使用 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>
于 2011-09-15T15:59:54.747 回答