web-dev-qa-db-ja.com

Excel VBAを使用したWordアプリケーションの作成:実行時エラー '429':ActiveXコンポーネントはオブジェクトを作成できません

Excel VBAを使用してWordドキュメントを保存しようとしていますが、エラーが発生します

「ActiveXコンポーネントはオブジェクトを作成できません。」

デバッグすると、エラーはSet wrdApps = CreateObject("Word.Application")という行から発生します。

動作していたが、このエラーが発生し始めた。

Sub saveDoc()

Dim i As Integer
For i = 1 To 2661:
    Dim fname As String
    Dim fpath As String

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    fname = ThisWorkbook.Worksheets(3).Range("H" & i).Value
    fpath = ThisWorkbook.Worksheets(3).Range("G" & i).Value

    Dim wrdApps As Object
    Dim wrdDoc As Object

    Set wrdApps = CreateObject("Word.Application")

    'the next line copies the active document- the ActiveDocument.FullName 
    ' is important otherwise it will just create a blank document
    wrdApps.documents.Add wrdDoc.FullName

    Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)
    ' do not need the Activate, it will be Activate
    wrdApps.Visible = False  

    ' the next line saves the copy to your location and name
    wrdDoc.SaveAs "I:\Yun\RTEMP DOC & PDF\" & fname

    'next line closes the copy leaving you with the original document
    wrdDoc.Close

    On Error GoTo NextSheet:
NextSheet:
    Resume NextSheet2
NextSheet2:
Next i

With Application
   .DisplayAlerts = True
   .ScreenUpdating = True
   .EnableEvents = True
End With

End Sub
12
user2525309

WrdDocは初期化されていますか?オブジェクトが設定される前にwrdDocを使用しようとしていますか?

wrdApps.documents.Add wrdDoc.FullName
Set wrdDoc = wrdApps.documents.Open(ThisWorkbook.Worksheets(3).Range("f" & i).Value)

コメントのように、最初の行をActiveDocument.FullNameにする必要がありますか?そう:

wrdApps.documents.Add ActiveDocument.FullName
1
Simon Shirley

Windows 7から10にアップグレードするときに、私が持っているvbaスクリプトを持ってくると問題が発生しました。エラーの根本的な原因が何であるかはまだわかりませんが、当面の間、このコードはうまくいきました。これは、Word(またはOutlook/Excel)を既に開いた(手動で)状態にする必要を制限する回避策ですが、参照が設定されている場合はスクリプトを実行できます。 "CreateObject("を "GetObject(、"に変更するだけです。これにより、システムはすでに開いているウィンドウを使用するようになります。

使用する完全なコードは次のとおりです。

Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
1
user64773

Microsoft ExcelオブジェクトライブラリとMicrosoft Officeオブジェクトライブラリがツール>参照でチェックされていること、およびそれらが登録されていることを確認します。

チェックされている場合は、Excelの[ヘルプ]メニューから[アプリケーションの自動修復]を実行して、Officeのインストールが破損していないことを確認する必要があります。

1
Simon Shirley

私は最近、これを私が書いたいくつかのコードに起こりました。 (数か月間正常に実行した後)どこからともなく、同じランタイムエラー '429'が発生します。これは、2か月前にコードを記述してテストした2台のコンピューターと、実際にツールを使用した人のコンピューターで発生しました。私は自分のマシンで元のファイルを使用していて、ユーザーが数か月間彼のコピーを正常に使用していたので、それは起こりました。それが言われているので、私はこれがなぜ起こったかの良い説明がありません。鉱山は同様のコード行で発生します。

Dim objFSO as Object
Set objFSO = CreateObj("Scripting.FileSystemObject")

私はスクリプトライブラリへの参照を含めて、以前はこれを成功させていました。

そのオブジェクトのバインディングをレイトからアーリーに変更することで問題を修正することができました。

Dim objFSO as New Scripting.FileSystemObject

私はしばらくの間、すべてを事前バインディングに切り替えてきましたが、これはいくつかのレガシーコードでした。 2つの違いに関する素敵な短い説明がここにあります: https://excelmacromastery.com/vba-dictionary/#Early_versus_Late_Binding

それで問題が解決した理由は完全にはわかりませんが、同じような問題を抱えている将来的に他の人に役立つことを願っています。

0
user2731076