【问题标题】:activex component can't create object error with word.applicationactivex 组件无法使用 word.application 创建对象错误
【发布时间】:2018-04-03 00:52:24
【问题描述】:

我正在使用下面提到的代码在 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

【问题讨论】:

  • Word 是否实际安装在机器上并正确注册?除此之外,您向我们展示的代码中还有很多不好的地方。除了 Walters 之外:您不应该将程序命名为 Word,因为这可能会被 VBA 误解。您没有声明invwbtest - 您是否在代码模块的顶部有Option Explicit?如果没有,请添加它以防止由拼写错误等引起的问题。
  • 还有objWord.ActiveDocument.Close Savechanges:=wdDoNotSaveChange - 这里你应该使用你为Word文档声明的对象objDoc,而不是ActiveDocument
  • Cindy,你的观察很有价值。但是在我格式化我的系统之前,同样的代码正在运行。但是在新安装之后,这不起作用并出现错误。
  • 然后我回到我的第一个观察结果:Word 是否正确安装和注册 - 显然不是。尝试修复 Word/Office。还有,你说新装:和以前有什么不同?
  • 系统已格式化,每个应用程序都是全新安装的。

标签: vba excel


【解决方案1】:

要正确处理可以使用辅助函数的任何单词实例

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 表单,以免受到之前尝试分散的任何 残留单词实例的影响

如果这一切都不能解决问题,那么你必须更深入地检查......

【讨论】:

    【解决方案2】:

    您为错误指示的行似乎没问题(只要正常安装了长字,我确定是这种情况)。

    不正常的是后续行:...Set objWord.Visible = True.., 当然,这一行会产生一个错误原因,它只是一个要设置的属性,而不是一个对象。 那应该只是一个:objWord.Visible = True。 希望这可以帮助。 韩国。

    【讨论】:

    • Word 安装正确。尝试通过在“objWord.Visible = True”之前删除 Set 来处理您的建议。但没有运气。
    • @Rishi 他没有说删除它,他说编辑它。带走Set
    • @cindy,我也是这样做的 :)
    【解决方案3】:

    请检查以下链接以跟踪您的错误。

    Microsoft Help for Automation Error

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多