簡體   English   中英

使用 Excel VBA 創建 Word 應用程序:運行時錯誤“429”:ActiveX 組件無法創建對象

[英]Creating Word Application using Excel VBA: Run-time error '429': ActiveX component can't create object

我正在嘗試使用 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

帶着我的 VBA 腳本庫從 Windows 7 升級到 10 時,我遇到了問題。 仍然不確定錯誤的根本原因是什么,但同時這段代碼對我有用。 這是一種解決方法,它限制了 Word(或 Outlook/Excel)已經處於打開(手動)狀態的需要,但如果您設置了引用,則應該允許您的腳本運行。 只需將"CreateObject("更改為"GetObject(, " 。這將告訴系統使用已經打開的窗口。

要使用的完整代碼是:

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

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

檢查您是否在工具 > 參考中勾選了 Microsoft Excel 對象庫和 Microsoft Office 對象庫,並且它們已被注冊。

如果它們被勾選,您可能需要從 Excel 幫助菜單運行檢測和修復以確保 Office 安裝沒有以任何方式損壞。

我最近在我寫的一些代碼中發生了這種情況。 突然(成功運行幾個月后),我會得到相同的運行時錯誤“429”。 這發生在兩台不同的計算機上,我在幾個月前編寫並測試了代碼的計算機以及實際使用該工具的人的計算機。 即使我在我的機器上使用了原始文件並且用戶已經成功使用了他的副本幾個月,但它還是發生了,所以我不相信兩台不同機器上的兩個單獨文件都以相同的方式損壞。 話雖如此,我對為什么會發生這種情況沒有很好的解釋。 我的將發生在類似的代碼行上:

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

我參考了腳本庫,並且在過去成功完成了這項工作。

我能夠通過將該對象從后期綁定更改為早期綁定來解決該問題:

Dim objFSO as New Scripting.FileSystemObject

一段時間以來,我一直將所有內容切換到早期綁定,但這是一些遺留代碼。 可以在此處找到有關兩者之間差異的簡短說明: https : //excelmacromastery.com/vba-dictionary/#Early_versus_Late_Binding

我不完全確定為什么會解決這個問題,但希望它會在未來幫助其他人解決類似問題。

就我而言,它似乎與第二個“ThisWorkbook”對象的存在有關。

Excel VBA 項目已生成多個 Workbook 對象

沒有其他解決方案找到此鏈接中的解決方案。 不過我自己沒試過。

就我而言,工作簿似乎已損壞。 簡單地將工作表分配給變量會引發錯誤。

Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("Data")

工作簿直接來自客戶,所以我不確定他們用它做了什么,或者它有多久了,但所有參考似乎都被選中了。 具有相同代碼的所有其他工作簿都正常工作。

所以為了解決這個問題,我將工作表和模塊復制到一個新的工作簿中,並且沒有任何問題。

可能並不總是最好的解決方案,但如果您沒有任何工作表和模塊,那么這很容易。

試試這個……我遇到過很多次了……

所以我只是通過搜索它(位於任務欄上)來運行我的 excel,然后右鍵單擊然后“以管理員身份運行”,或者如果您已經創建了 excel 文件,請從文件>打開>瀏覽中打開它。 避免雙擊excel文件直接打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM