1

VBProject オブジェクトへのレイト バインディングを試行すると、「実行時エラー 429」が発生します。

Dim vbProj As Object
Set vbProj = CreateObject("ActiveDocument.VBProject")

私が理解できていない基本的なことはありますか?

たとえば、記事 308340の遅延バインディングを使用するコードをどのように記述しますか?

 Sub CheckReference()

        Dim vbProj As VBProject  
        Set vbProj = ActiveDocument.VBProject

        For Each chkRef In vbProj.References

          If chkRef.IsBroken Then
             Debug.Print chkRef.Name
          End If

        Next

    End Sub
4

2 に答える 2

4

デニス、

これを Word 内から実行している場合は、CreateObject() を使用する必要はありません。

vbProj = ActiveDocument.VBProject を設定すると機能します。

これを他の場所から実行している場合は、最初に Word オブジェクトを作成してドキュメントをロードする必要がある場合があります。

  Dim a As Object
  Dim vbProj As Object

  Set a = CreateObject("Word.Application")
  a.Documents.Open "C:\temp\test1.docx"
  MsgBox a.Documents.Count
  Set vbProj = a.ActiveDocument.VBProject

どちらの場合も、マクロのセキュリティ設定http://support.microsoft.com/kb/282830で解決される「Visual Basic プロジェクトへのプログラムによるアクセスは信頼されていません」というメッセージが表示される場合があります。

これがあなたの質問に答えることを願っています。

于 2009-12-03T04:43:33.810 に答える
0

その progid (ActiveDocument.VBProject) はどこで思いついたのですか? 通常、progid は、Excel.Sheet または Word.Document のように、AppName.ObjectName の形式です。IIRC、VB6 は OLE オートメーション自体をサポートしていません。むしろ、OLE オートメーション サーバーとクライアントの作成をサポートします。

アップデート:

わかりました、今何が起こっているのかわかりました。ActiveDocument.VBProject は有効なプログラム ID ではありません。ActiveDocument は Word.Application オブジェクトのプロパティで、progid は (驚き!) "Word.Application" です。

だからあなたはメリングロスの答えが欲しい.

于 2009-12-02T22:35:33.053 に答える