我使用下面提到的代码复制word中的一些值,然后将其复制回excel。
但是得到了
运行时错误429 Activex组件无法创建对象。
在格式化系统之前,同样的代码工作正常。但是在新安装之后,这不起作用,我收到了错误。
Sub Word()
Application.DisplayAlerts = False
Dim ws As Worksheet
Dim Path As String
Dim objWord As Object
Dim objDoc As Object
Path = ActiveWorkbook.Path
Set inv = Workbooks.Open(Path & "\inv.xls")
Set test = Workbooks.Open(Path & "\test.xlsx")
Set ws = inv.Sheets("inv")
Set Wb = test.Sheets("Sheet1")
ws.Range("A1").Copy
Set objWord = CreateObject("Word.Application") <---The error is here
Set objWord.Visible = True
Set objDoc = objWord.Documents.Open(Path & "\test.docx")
objWord.Selection.Paste
Application.CutCopyMode = False
objDoc.Range(0, objDoc.Range.End).Copy
Wb.Range("A1").Select
ActiveSheet.Paste
inv.Close Savechanges:=False
test.Close Savechanges:=True
objWord.ActiveDocument.Close Savechanges:=wdDoNotSaveChange
objWord.Quit
Set objWord = Nothing
Set objDoc = Nothing
End Sub
答案 0 :(得分:0)
您为错误指示的行似乎没问题(因为通常会安装长字,我确定是这种情况)。
什么是不行的是连续的行:...Set objWord.Visible = True..
,
当然这条线会产生一个错误原因,它只是一个要设置的属性而不是一个对象。
这应该只是一个:objWord.Visible = True
。
希望这可以帮助。
KR。
答案 1 :(得分:0)
请检查以下链接以跟踪您的错误。
答案 2 :(得分:0)
正确处理任何单词实例,你可以使用辅助函数
Function GetWord(objWord As Object) As Boolean
On Error Resume Next
Set objWord = GetObject(, "Word.Application") ' try getting an already running instance of Word
If objWord Is Nothing Then Set objWord = CreateObject("Word.Application") ' if no running instance of Word then try setting a new one
GetWord = Not objWord Is Nothing ' return the function result
If Not GetWord Then MsgBox "Couldn't get Word", vbCritical ' inform the user that something went wrong
因此你的宏可以按如下方式利用它
Sub Word()
Dim objWord As Object
If Not GetWord(objWord) Then Exit Sub
objWord.Visible = True
... rest of your code
End Function
在尝试此解决方案之前,您应关闭excel实例并运行新的Excel表单,以免遭受以前尝试中散布的任何残余字实例
如果这一切都无法解决问题,那么你必须更深入地检查......