症状

运行使用自动化控制 Microsoft Excel 的代码时,可能会出现以下错误之一: 在 Microsoft Excel 97 及更高版本的 Excel 中,你会收到以下错误消息之一:

错误消息 1

运行时错误“1004”: 对象“_Global”的方法“<方法> 的名称”失败

错误消息 2

应用程序定义的错误或对象定义的错误

在 Microsoft Excel 95 中,你会收到以下错误消息之一:

错误消息 1

运行时错误“-2147023174” OLE 自动化错误

错误消息 2

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

原因

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

解决方法

若要解决此问题,请修改代码,以便使用相应的对象变量限定对 Excel 对象、方法或属性的每次调用。

状态

此行为是设计使然。

更多信息

若要自动执行 Microsoft Excel,请建立一个对象变量,该变量通常引用 Excel Application 对象或 Excel 工作簿对象。 然后,可以将其他对象变量设置为引用 Microsoft Excel 对象模型中的 Worksheet、Range 或其他对象。 编写代码以使用 Excel 对象、方法或属性时,应始终在调用前使用相应的对象变量。 否则,Visual Basic 会建立对 Excel 的自己的引用。 尝试多次运行自动化代码时,此引用可能会导致问题。 请注意,即使代码行以对象变量开头,也可以在前面没有对象变量的代码行中间调用 Excel 对象、方法或属性。以下步骤演示了如何重现此问题以及如何更正问题。

重现行为的步骤

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

  2. 在“项目”菜单上,单击“引用”,然后检查要自动化的 Excel 版本的对象库。

  3. 在 Form1 上放置 CommandButton 控件。

  4. 将以下代码示例复制到 Form1 的代码窗口。

          Option Explicit
    
          Private Sub Command1_Click()
             Dim xlApp As Excel.Application
             Dim xlBook As Excel.Workbook
             Dim xlSheet As Excel.Worksheet
             Set xlApp = CreateObject("Excel.Application")
             Set xlBook = xlApp.Workbooks.Add
             Set xlSheet = xlBook.Worksheets("Sheet1")
             xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello"
             xlBook.Saved = True
             Set xlSheet = Nothing
             Set xlBook = Nothing
             xlApp.Quit
             Set xlApp = Nothing
          End Sub
    
  5. “运行 ”菜单上,单击“ 开始”,或按 F5 启动程序。

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

  7. 再次单击 CommandButton 控件。 请注意,你会收到“症状”部分中讨论的错误消息之一。注意 之所以出现错误消息,是因为代码引用单元格的 方法,而不在调用之前使用 xlSheet 对象变量。

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

    xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
    

    将代码行更改为类似于以下代码行。

    xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
    
  9. 再次运行程序。 请注意,可以多次运行代码,而不会收到错误消息。

参考

189618 运行使用自动化控制Word的 Visual Basic 代码时,可能会收到“运行时错误'-2147023174' (800706ba) ”错误消息或“运行时错误'462'”  

需要更多帮助?

需要更多选项?

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