我正在尝试使用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
答案 0 :(得分:2)
从Windows 7升级到10时遇到问题,我随身携带了VBA脚本。
仍然不确定错误的根本原因是什么,但是与此同时,这段代码对我有用。
这是一种变通方法,可以限制Word(或Outlook / Excel)已处于打开(手动)状态的需要,但如果设置了引用,则应允许运行脚本。
只需将"CreateObject("
更改为"GetObject(, "
。这将告诉系统使用已经打开的窗口。
要使用的完整代码为:
Dim wrdApps As Object
Dim wrdDoc As Object
Set wrdApps = GetObject(, "Word.Application")
答案 1 :(得分: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
答案 2 :(得分:1)
检查您是否在工具>中勾选了Microsoft Excel对象库和Microsoft Office对象库。参考文献并且已经注册。
如果勾选了这些内容,则可能需要从“Excel帮助”菜单中运行“检测并修复”,以确保Office安装没有以任何方式损坏。
答案 3 :(得分:0)
就我而言,它似乎与第二个“ ThisWorkbook”对象的存在有关。
Excel VBA Project has generated multiple Workbook objects
没有其他解决方案找到此链接中的那个。我自己没有尝试过。
答案 4 :(得分:0)
就我而言,该工作簿似乎已损坏。只是将工作表分配给变量就会引发错误。
Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("Data")
该工作簿直接来自客户端,因此我不确定他们对它进行了什么操作或使用了多长时间,但是似乎所有的引用都已被选中。具有相同代码的所有其他工作簿均正常运行。
因此,为解决此问题,我将工作表和模块复制到新的工作簿中,并且没有任何问题。
不一定总是最好的解决方案,但是如果您没有任何工作表和模块,那很容易。
答案 5 :(得分:0)
我最近在编写的某些代码上遇到了这种情况。一无所获(成功运行几个月后),我将收到相同的运行时错误“ 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
我不确定为什么能解决此问题,但希望它将在以后解决其他类似问题。
答案 6 :(得分:-1)
尝试这个。.我已经遇到很多时间了...
所以我只是通过搜索excel(位于任务栏上)来运行excel,然后右键单击然后“以管理员身份运行” 或者,如果您已经创建了excel文件,请从文件>打开>浏览中将其打开。避免只双击excel文件直接打开。