Síntomas
Al ejecutar código de Microsoft Visual Basic que usa Automation para controlar Microsoft Word, es posible que reciba uno de los siguientes mensajes de error:
Mensaje de error 1Error '-2147023174' en tiempo de ejecución (800706ba)
Error de automatizaciónMensaje 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 Word debido a una línea de código que llama a un Word objeto, método o propiedad sin calificarlo con una variable de objeto de Word. 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
Modifique el código para que cada llamada a un Word objeto, método o propiedad se califique con la variable de objeto correspondiente.
Estado
Este comportamiento es una característica del diseño de la aplicación.
Más información
Para automatizar Word, establezca una variable de objeto que normalmente hace referencia a la aplicación Word o al objeto Document. A continuación, se pueden establecer otras variables de objeto para hacer referencia a una selección, un rango u otros objetos en el modelo de objetos Word. Al escribir código para usar un Word objeto, método o propiedad, siempre debe preceder la llamada con la variable de objeto adecuada. Si no lo hace, Visual Basic usa una referencia de variable global oculta que establece en la instancia en ejecución. Si Word se apaga o si se libera la variable de objeto declarada, la variable global oculta ahora hará referencia a un objeto no válido (destruido). Al volver a ejecutar el código de automatización, las llamadas a esta variable de objeto oculto producirán un error con el error anteriormente mencionado.
Los pasos siguientes muestran cómo reproducir este problema y cómo corregirlo.Pasos para reproducir el comportamiento
-
Inicie un nuevo proyecto EXE estándar en Visual Basic. El formulario1 se crea de forma predeterminada.
-
Haga clic en Referencias en el menú Proyecto y, a continuación, haga clic en una de las siguientes opciones:
-
Para Office Word 2007, haga clic en Biblioteca de objetos de Microsoft Word 12.0
-
Para Word 2003, haga clic en Biblioteca de objetos de Microsoft Word 11.0
-
Para Word 2003, haga clic en Biblioteca de objetos de Microsoft Word 10.0
-
Para Word 2000, haga clic en Biblioteca de objetos de Microsoft Word 9.0.
-
Para Word 97, haga clic en Biblioteca de objetos de Microsoft Word 8.0.
-
-
Coloque un CommandButton en Form1.
-
Copie el código siguiente en la ventana Código del Formulario1:
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
-
En el menú Ejecutar , haga clic en Inicio o presione la tecla F5 para iniciar el programa.
-
Haga clic en CommandButton. No se produce ningún error. Sin embargo, se ha creado una referencia a Word y no se ha publicado.
-
Haga clic en commandbutton de nuevo y tenga en cuenta que recibe el error descrito anteriormente.
Nota El error se produce porque el código hace referencia al método InchesToPoints sin precedir la llamada con la variable de objeto oWord. -
Detenga el proyecto y cambie la línea siguiente:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-Para-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Ejecute el programa de nuevo. A continuación, haga clic en el CommandButton. No se produce ningún error.
-
Haga clic en commandbutton de nuevo y tenga en cuenta que recibe el error.
Nota El error se produce porque el código hace referencia al objeto Range de la sección De ActiveDocument sin preceder la llamada con la variable de objeto oWord. -
Detenga el proyecto y cambie la línea siguiente:
Set oRange = ActiveDocument.Sections(1).Range
-Para-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Ejecute el programa de nuevo. Tenga en cuenta que puede ejecutar el código varias veces sin errores.
Al crear un proyecto de Visual Basic automatizando Word, si el proyecto tiene una referencia a la Biblioteca de objetos de Microsoft Word, el código de ejemplo de los objetos, métodos y propiedades del modelo de objetos de Word está disponible desde el archivo de Ayuda de Word. Cuando el cursor está sobre una palabra clave del código, verás cualquier texto de ayuda aplicable presionando la tecla F1.
El código de ejemplo del tema de Ayuda será el código de Microsoft Word Visual Basic para Aplicaciones. No se mostrarán las referencias de objeto que el código de Visual Basic requiere. Deberá agregar los cualificadores según corresponda.Referencias
Para obtener información adicional, consulte los siguientes artículos en Microsoft Knowledge Base:
178510 PRB: Error en el método de automatización de Excel del objeto "_Global"
Para obtener información adicional sobre la automatización de aplicaciones de Office, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base: