1

私はvbscriptを使用して、Word文書のリストをプログラムで実行し、それぞれを開いて変更し、msword2010を使用して保存しています。私の問題はリストに保護された文書と保護されていない文書があることです。保護されたドキュメントに到達すると、次のエラーが発生します。オブジェクトがドキュメントの保護された領域を参照しているため、このメソッドまたはプロパティは使用できません。

だから私はいくつかの調査を行い、msのウェブサイトでこのコードを見つけました:

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

ここで、問題は新しいエラーです。ドキュメントがすでに保護されていないため、保護されていないメソッドまたはプロパティを使用できません。エラーを回避するために、リストに両方が含まれることがわかっている場合に、ドキュメントが保護されているか保護されていないかを確認する別の方法はありますか?

4

1 に答える 1

4

VBScript を使用して MS Office アプリケーションを自動化する (そして VBA サンプル コードを開始点として使用する) 場合、VBA で事前定義されているが、VBA では不足している wd*、xl*、または ad(?)* 定数を定義する必要性を見落とす可能性があります。 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 に答える