繁体   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