Síntomas
Mientras se ejecuta el código que usa Automation para controlar Microsoft Excel, puede producirse uno de los siguientes errores:
En Microsoft Excel 97 y en versiones posteriores de Excel, recibe uno de los siguientes mensajes de error:
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 aplicaciones o definido por objetos
En Microsoft Excel 95, recibe uno de los siguientes mensajes de error:
Mensaje de error 1
Error '-2147023174'
en tiempo de ejecución
Error de automatización OLE
Mensaje de error 2
Error en tiempo de ejecución '462':
El equipo 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 finaliza el programa. Esta referencia errante interfiere con el código de automatización cuando el código se ejecuta más de una vez.
Solución
Para resolver este problema, modifique el código para 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, establezca una variable de objeto que normalmente haga referencia al objeto Application de Excel o al objeto Libro de Excel. A continuación, se pueden establecer otras variables de objeto para hacer referencia a una hoja de cálculo, un rango u otros objetos en el modelo de objetos de Microsoft Excel. Al escribir código para usar un objeto, método o propiedad de Excel, siempre debe preceder la llamada con la variable de objeto adecuada. Si no lo hace, Visual Basic establece su propia referencia a Excel. Esta referencia puede causar problemas al intentar ejecutar el código de automatización varias veces. Tenga en cuenta que incluso si la línea de código comienza con la variable de objeto, se puede realizar una llamada a un objeto, método o propiedad de Excel en medio de la línea de código que no está precedida de una variable de objeto.
En los pasos siguientes se muestra cómo reproducir este problema y cómo corregirlo.
Pasos para reproducir este comportamiento
-
Inicie un nuevo proyecto EXE estándar en Visual Basic. El formulario1 se crea de forma predeterminada.
-
En el menú Proyecto , haga clic en Referencias y, a continuación, compruebe en la Biblioteca de objetos la versión de Excel que desea automatizar.
-
Coloque un control CommandButton en Form1.
-
Copie el ejemplo de código siguiente en la ventana Código de Formulario1.
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
-
En el menú Ejecutar , haga clic en Inicio o presione F5 para iniciar el programa.
-
Haga clic en el control CommandButton . No se produce ningún error. Sin embargo, se ha creado una referencia a Excel y no se ha publicado.
-
Vuelva a hacer clic en el control CommandButton . Observe que recibe uno de los mensajes de error que se analizan en la sección "Síntomas".
Nota El mensaje de error se produce porque el código hace referencia al método de la celda sin precedir la llamada con el
variable de objeto xlSheet. -
Detenga el proyecto y cambie la siguiente línea de código:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Cambie la línea de código para que se parezca a la siguiente línea de código.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Ejecute el programa de nuevo. Tenga en cuenta que puede ejecutar el código varias veces sin recibir un mensaje de error.
Referencias
189618 Es posible que reciba el mensaje de error "Error en tiempo de ejecución '-2147023174' (800706ba)" o el "Error en tiempo de ejecución '462'" al ejecutar código de Visual Basic que usa Automation para controlar Word