应用对象
Office Products

症状

运行使用自动化控制 Microsoft Word的 Microsoft Visual Basic 代码时,可能会收到以下错误消息之一: 错误消息 1

运行时错误“-2147023174” (800706ba) 自动化错误

错误消息 2

运行时错误“462”:远程服务器计算机不存在或不可用

原因

Visual Basic 已建立对Word的引用,因为有一行代码调用Word对象、方法或属性,但未使用Word对象变量对其进行限定。 在结束程序之前,Visual Basic 不会发布此引用。 多次运行代码时,此错误引用会干扰自动化代码。

解决方法

修改代码,以便使用相应的对象变量限定对Word对象、方法或属性的每次调用。

状态

此行为是设计使然。

更多信息

若要自动Word,请建立一个对象变量,该变量通常引用 Word Application 或 Document 对象。 然后,可以将其他对象变量设置为引用 Selection、Range 或Word对象模型中的其他对象。 编写代码以使用 Word 对象、方法或属性时,应始终在调用前使用相应的对象变量。 否则,Visual Basic 将使用隐藏的全局变量引用,该引用设置为当前正在运行的实例。 如果关闭Word,或者释放声明的对象变量,则隐藏的全局变量现在将引用无效 (销毁) 对象。 再次运行自动化代码时,对此隐藏对象变量的调用将失败,并出现上述错误。以下步骤演示了如何重现此问题以及如何更正此问题。  

重现行为的步骤

  1. 在 Visual Basic 中启动新的标准 EXE 项目。 默认情况下,将创建 Form1。

  2. 单击“项目”菜单中的“引用”,然后单击以下选项之一:

    • 对于 Office Word 2007,请单击 Microsoft Word 12.0 对象库

    • 对于 Word 2003,请单击 Microsoft Word 11.0 对象库

    • 对于 Word 2003,单击“Microsoft Word 10.0 对象库

    • 对于 Word 2000,请单击“Microsoft Word 9.0 对象库”。

    • 对于 Word 97,请单击“Microsoft Word 8.0 对象库”。

  3. 在 Form1 上放置 CommandButton。

  4. 将以下代码复制到 Form1 的代码窗口:

          Option Explicit
    
          Private Sub Command1_Click()
             Dim oWord As Word.Application
             Dim oDoc As Word.Document
             Dim oRange as Word.Range
    
             Set oWord = CreateObject("Word.Application")
             With oWord
                 .Visible = True
                 .Activate
                 .WindowState = wdWindowStateNormal
             End With
    
             Set oDoc = oWord.Documents.Add
             MsgBox "Document open", vbMsgBoxSetForeground
             With oDoc
                 .PageSetup.LeftMargin = InchesToPoints(1.25)
             End With
    
             ' This example inserts text at the end of section one.
             Set oRange = ActiveDocument.Sections(1).Range
             With oRange
                 .MoveEnd Unit:=wdCharacter, Count:= -1
                 .Collapse Direction:=wdCollapseEnd
                 .InsertParagraphAfter
                 .InsertAfter "End of section."
             End With
    
             With oDoc
                 .Saved = True
             End With
    
             Set oRange = Nothing
             Set oDoc = Nothing
             oWord.Quit
             Set oWord = Nothing
          End Sub
    
  5. “运行 ”菜单上,单击“ 开始 ”或按 F5 键启动程序。

  6. 单击 CommandButton。 不发生错误。 但是,已创建对Word的引用,但尚未发布。

  7. 再次单击 CommandButton,并注意收到前面所述的错误。注意 发生此错误的原因是代码引用 InchesToPoints 方法,而不使用 oWord 对象变量在调用之前。

  8. 停止项目并更改以下行:

    .PageSetup.LeftMargin = InchesToPoints(1.25)
    

    -自-  

    .PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
    
  9. 再次运行程序。 然后,单击“CommandButton”。 不发生错误。

  10. 再次单击 CommandButton,并注意收到错误。注意 发生此错误是因为代码引用 ActiveDocument Section 一个的 Range 对象,而不使用 oWord 对象变量在调用之前。

  11. 停止项目并更改以下行:

    Set oRange = ActiveDocument.Sections(1).Range
    

    -自-  

    Set oRange = oWord.ActiveDocument.Sections(1).Range
    
  12. 再次运行程序。 请注意,可以多次运行代码,而不会出错。

生成自动化Word的 Visual Basic 项目时,如果项目引用了 Microsoft Word 对象库,则 Word 对象模型的对象、方法和属性的示例代码可从 Word 帮助文件中获取。 当光标位于代码中的某个关键字上时,你将通过按 F1 键看到任何适用的帮助文本。帮助主题中的示例代码将是 Microsoft Word Visual Basic for Applications代码。 它不会显示 Visual Basic 代码所需的对象引用。 需要根据需要添加限定符。

参考

有关其他信息,请参阅 Microsoft 知识库中的以下文章:

178510 PRB:对象“_Global”的 Excel 自动化方法失败

有关 Office 应用程序自动化的其他信息,请单击下面的序列号以查看 Microsoft 知识库中的文章:

Word对象模型概述

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。