12

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

7 回答 7

2

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

要使用的完整代码是:

Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
于 2018-07-11T23:28:29.307 回答
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

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

于 2019-12-05T16:19:29.517 回答
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
于 2013-09-30T09:53:05.667 回答
1

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

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

于 2013-10-03T10:10:26.027 回答
0

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

Excel VBA 项目已生成多个工作簿对象

没有其他解决方案找到此链接中的解决方案。不过我自己没试过。

于 2019-10-04T10:03:22.710 回答
0

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

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

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

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

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

于 2019-12-03T08:31:20.033 回答
-1

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

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

于 2018-09-09T08:49:00.043 回答