La automatización de Excel produce un error la segunda vez que se ejecuta el código

Síntomas

Mientras se ejecuta el código que utiliza la automatización para controlar Microsoft Excel, se puede producir alguno de los errores siguientes:

En Microsoft Excel 97 y en versiones posteriores de Excel, recibe uno de los mensajes de error siguientes:
Mensaje de error 1
Error en tiempo de ejecución '1004':
Error en el método '<nombre del método>' del objeto '_Global'.
Mensaje de error 2
Error definido por la aplicación o por el objeto
En Microsoft Excel 95, aparece un mensaje de error similar a los siguientes:
Mensaje de error 1
Error en tiempo de ejecución '-2147023174'
Error de automatización OLE
Mensaje de error 2
Error en tiempo de ejecución '462':
El servidor remoto no existe o no está disponible.

Causa

Visual Basic ha establecido una referencia a Excel debido a una línea de código que llama a un objeto, método o propiedad de Excel sin calificar el elemento con una variable de objeto de Excel. Visual Basic no libera esta referencia hasta que finalice el programa. Esta referencia errante interfiere con el código de automatización cuando se ejecuta más de una vez.

Solución

Para resolver este problema, modifique el código de modo que cada llamada a un objeto, método o propiedad de Excel se califique con la variable de objeto adecuada.

Estado

Este comportamiento es una característica del diseño de la aplicación.

Más información

Para automatizar Microsoft Excel, establece una variable de objeto que normalmente hace referencia al objeto Application o al objeto Workbook de Excel. Otras variables de objeto se pueden establecer a continuación para hacer referencia a un objeto Worksheet, Range u otros del modelo de objetos de Microsoft Excel. Al escribir el código para utilizar un objeto, método o propiedad de Excel, siempre debería preceder la llamada con la variable de objeto adecuada. Si no lo hace, Visual Basic establece su propia referencia a Excel. Esta referencia podría producir problemas al intentar ejecutar varias veces el código de automatización. Tenga en cuenta que aun cuando la línea de código comience con la variable de objeto, se puede hacer una llamada a un objeto, método o propiedad de Excel en mitad de la línea de código que no se precede con una variable de objeto.

Los pasos siguientes muestran cómo reproducir este problema y corregirlo.

Pasos para reproducir este comportamiento

  1. Inicie un nuevo proyecto EXE estándar en Visual Basic. De manera predeterminada se creará Form1.
  2. En el menú Proyecto, haga clic en Referencias y, a continuación, compruebe en la Biblioteca de objetos la versión de Excel que pretende automatizar.
  3. Coloque un control CommandButton en Form1.
  4. Copie el ejemplo de código siguiente en la ventana Código del formulario 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. En el menú Ejecutar, haga clic en Iniciar o presione F5 para iniciar el programa.
  6. Haga clic en el control CommandButton. No se producen errores. Sin embargo, se ha creado una referencia a Excel y no se ha liberado.
  7. Haga clic en el control CommandButton de nuevo. Observe que recibe uno de los mensajes de error que se indican en la sección "Síntomas".

    Nota: el mensaje de error se debe a que el código hace referencia al método de la celda sin preceder la llamada con la variable de objeto xlSheet.
  8. Detenga el proyecto y cambie la línea de código siguiente:
    xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
    Cambie la línea de código para que se parezca a la siguiente.
    xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
  9. Ejecute de nuevo el programa. Observe que puede ejecutar varias veces el código sin recibir un mensaje de error.

Referencias

Para obtener más información al respecto, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

167223 Está disponible el archivo de Ayuda de Automatización de Microsoft Office 97

189618 Puede recibir el mensaje "Error en tiempo de ejecución '-2147023174' (800706ba)" o "Error en tiempo de ejecución '462'" cuando ejecuta código de Visual Basic que utiliza Automatización para controlar Word

Propiedades

Id. de artículo: 178510 - Última revisión: 11/26/2007 - Revisión: 1

Comentarios