使用 Excel VBA 创建 Word 应用程序:运行时错误“429”:ActiveX 组件无法创建对象

Posted

技术标签:

【中文标题】使用 Excel VBA 创建 Word 应用程序:运行时错误“429”:ActiveX 组件无法创建对象【英文标题】:Creating Word Application using Excel VBA: Run-time error '429': ActiveX component can't create object 【发布时间】:2013-06-24 00:29:36 【问题描述】:

我正在尝试使用 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

【问题讨论】:

OzGrid 上的 This post 可能会有所帮助。我看到的唯一区别是 wrd.Apps 将设置为 Word.Application 而 wrd.Doc 将设置为 Word.Document。 尝试在 Office 上运行修复,然后重新启动您的电脑...您拥有的代码 CreateObject("Word.Application") 应该可以正常工作 如果您尝试“获取”的对象具有提升的权限。它将返回 429 错误 - 不要以管理员身份打开 【参考方案1】:

我在从 Windows 7 升级到 10 时遇到了问题,当时我随身携带了大量的 VBA 脚本。 仍然不确定错误的根本原因是什么,但与此同时,这段代码对我有用。 这是一种解决方法,它限制了 Word(或 Outlook/Excel)已经处于打开(手动)状态的需要,但如果您设置了引用,则应该允许您的脚本运行。 只需将"CreateObject(" 更改为"GetObject(, "。这将告诉系统使用已经打开的窗口。

要使用的完整代码是:

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

【讨论】:

【参考方案2】:

我最近在我编写的一些代码中遇到了这种情况。不知从何而来(在成功运行几个月后),我会得到相同的运行时错误“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

我不完全确定为什么这会解决问题,但希望它可以帮助其他人在未来遇到类似问题。

【讨论】:

【参考方案3】:

wrdDoc 是否已初始化?您是否尝试在设置对象之前使用 wrdDoc?

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

第一行应该是 ActiveDocument.FullName 在 cmets 中吗?所以:

wrdApps.documents.Add ActiveDocument.FullName

【讨论】:

【参考方案4】:

检查您是否在工具>参考中勾选了 Microsoft Excel 对象库和 Microsoft Office 对象库,并且它们已被注册。

如果勾选,您可能需要从 Excel 帮助菜单运行检测和修复,以确保 Office 安装没有以任何方式损坏。

【讨论】:

【参考方案5】:

就我而言,这似乎与第二个“ThisWorkbook”对象的存在有关。

Excel VBA Project has generated multiple Workbook objects

没有找到与此链接中的解决方案相同的解决方案。不过我自己并没有尝试过。

【讨论】:

【参考方案6】:

就我而言,工作簿似乎已损坏。简单地将工作表分配给变量会引发错误。

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

该工作簿直接来自客户,所以我不确定他们对它做了什么,或者它的年代久远,但似乎所有的参考资料都被选中了。具有相同代码的所有其他工作簿都可以正常工作。

所以为了解决这个问题,我将工作表和模块复制到了一个新的工作簿中,并且没有任何问题。

可能并不总是最好的解决方案,但如果您没有任何工作表和模块,那么这很容易。

【讨论】:

【参考方案7】:

试试这个..我遇到了很多时间...

所以我只是通过搜索来运行我的 excel(位于任务栏上),然后右键单击然后“以管理员身份运行” 或者如果您已经创建了 excel 文件,请从文件>打开>浏览打开它。避免直接双击excel文件打开。

【讨论】:

以上是关于使用 Excel VBA 创建 Word 应用程序:运行时错误“429”:ActiveX 组件无法创建对象的主要内容,如果未能解决你的问题,请参考以下文章

如何用VBA宏程序将excel中的内容批量复制到word文档中去

Excel中的VBA如何调用Java呀?

如何用EXCEL的VBA控制WORD文档?

Excel VBA:在 Word 文件中生成页脚

如何在Excel VBA 中读写word文档 步骤

通过 VBA excel 程序在 MS Word 标题中的边框线后添加页码和新行