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

13

我正尝试使用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上的这篇帖子可能会有所帮助。我看到的唯一区别是wrd.Apps将被设置为Word.Application,而wrd.Doc将被设置为Word.Document。 - chuff
尝试对Office进行修复,并重新启动您的电脑...您所拥有的代码CreateObject("Word.Application")应该可以正常工作。 - Our Man in Bananas
1
如果您尝试“获取”的对象具有提升的特权,则会返回429错误 - 不要以管理员身份打开。 - Hightower
7个回答

2

我最近遇到了这样的问题,我的一些代码突然出现了 Runtime Error '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

我不太确定为什么这样修复了问题,但希望它能帮助未来遇到类似问题的人。


2
我在从Windows 7升级到10时遇到了一个问题,当我带着我的大量VBA脚本时。目前我仍然不确定错误的根本原因,但是这段代码对我很有用。 这是一种解决方法,可以减少需要手动打开Word(或Outlook / Excel)的必要性,但如果您已经设置了引用,则应该允许您的脚本运行。 只需将“CreateObject(”更改为“GetObject(,”。这将告诉系统使用已经打开的窗口。
要使用的完整代码如下:
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")

1

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
请检查在“工具->引用”中是否勾选了Microsoft Excel对象库和Microsoft Office对象库,并且它们已经被注册。
如果它们被勾选了,您可能需要从Excel帮助菜单中运行“检测和修复”来确保Office安装没有受到任何损坏。

1
在我的情况下,工作簿似乎已经损坏。仅将工作表分配给变量就会引发错误。
Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("Data")

这个工作簿直接来自客户,所以我不确定他们对它做了什么,或者它有多久了,但是所有引用似乎都被选择了。其他带有相同代码的工作簿都能正常工作。
因此,为了解决问题,我将工作表和模块复制到新工作簿中,这样就没有任何问题了。
这可能不总是最好的解决方案,但如果没有工作表和模块,那么这非常容易。

0

-1

试试这个方法..我遇到过很多次...

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接