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
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
Windows 7から10にアップグレードするときに、私が持っているvbaスクリプトを持ってくると問題が発生しました。エラーの根本的な原因が何であるかはまだわかりませんが、当面の間、このコードはうまくいきました。これは、Word(またはOutlook/Excel)を既に開いた(手動で)状態にする必要を制限する回避策ですが、参照が設定されている場合はスクリプトを実行できます。 "CreateObject("を "GetObject(、"に変更するだけです。これにより、システムはすでに開いているウィンドウを使用するようになります。
使用する完全なコードは次のとおりです。
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
Microsoft ExcelオブジェクトライブラリとMicrosoft Officeオブジェクトライブラリがツール>参照でチェックされていること、およびそれらが登録されていることを確認します。
チェックされている場合は、Excelの[ヘルプ]メニューから[アプリケーションの自動修復]を実行して、Officeのインストールが破損していないことを確認する必要があります。
私は最近、これを私が書いたいくつかのコードに起こりました。 (数か月間正常に実行した後)どこからともなく、同じランタイムエラー '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
それで問題が解決した理由は完全にはわかりませんが、同じような問題を抱えている将来的に他の人に役立つことを願っています。