我正在使用vbscript以编程方式运行word文档列表,打开每个文档,修改它,然后使用ms word 2010保存它。我的问题是列表中有受保护和不受保护的文档。当我到达受保护的文档时,我收到此错误:此方法或属性不可用,因为该对象引用了文档的受保护区域。
所以我做了一些研究,并在ms网站上找到了这段代码:
If objDoc.ProtectionType <> wdNoProtection Then
objDoc.Unprotect
End if
现在问题是一个新错误:unprotect方法或属性不可用,因为文档已经不受保护。有没有另一种方法可以检查文档是受保护还是不受保护,当您知道列表中有两个文件时,是否可以避免错误?
答案 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>