/ / Se ejecuta en Error 462: La máquina del servidor remoto no existe cuando se trabaja con WORD a través de Excel VBA - excel, vba, excel-vba

Error 462: la máquina del servidor remoto no existe cuando se trabaja con WORD a través de Excel VBA - excel, vba, excel-vba

He estado intentando abrir un archivo de Wordprogramáticamente en Excel vba y agregando / editando contenidos usando marcadores. Sin embargo, encuentro que en ejecuciones alternativas, aparece el error "Error 462: El servidor remoto no existe". Investigué mucho y comprendí que esto tiene algo que ver "Referencias no calificadas ;.

Sin embargo, no entiendo cómo corregir el siguiente fragmento de código para referencias calificadas. ¿Alguien puede ayudar?

        Set exR = ActiveSheet.Range(TestIdCol & CStr(DataRowNum) & ":" & TestIdCol & CStr(RowEnd))

ExistingEvidenceDoc = UseFileDialogOpen("Word Documents", "*.doc;*.docx")

Set objWord = CreateObject("Word.Application")

If ExistingEvidenceDoc <> "" Then
Set objDoc = objWord.Documents.Open(ExistingEvidenceDoc)
Else
Exit Sub
End If

objWord.Visible = True
Application.Wait Now() + TimeSerial(0, 0, 5)


Set objSelection = objWord.Selection

getExistingEvidences = ExistingTestEvidences(objDoc)
o = DataRowNum
For Each cell In exR
If cell.Value <> "" And Not IsInArray(cell.Value, getExistingEvidences) Then
objSelection.Style = ActiveDocument.Styles("Heading 1")
objSelection.TypeText text:="Heading " + cell.Value
objSelection.TypeParagraph
objSelection.MoveLeft
objSelection.HomeKey Unit:=wdLine
objSelection.EndKey Unit:=wdLine, Extend:=wdExtend
objDoc.Bookmarks.Add Name:="BMrk" + CStr(o), Range:=objSelection
objSelection.Copy
ActiveSheet.Range("Q" + CStr(o)).Select
ActiveSheet.PasteSpecial Format:="Hyperlink", Link:=False, DisplayAsIcon _
:=False
objSelection.MoveRight

"objSelection.Style = ActiveDocument.Styles("Paragraph")
objSelection.TypeText text:=Range(DescriptionCol + CStr(cell.Row)).Value
objSelection.TypeParagraph


ElseIf IsInArray(cell.Value, getExistingEvidences) = False Then
objSelection.EndKey
objSelection.Style = ActiveDocument.Styles("Heading 1")
objSelection.TypeText text:="Heading " + cell.Value
objSelection.TypeParagraph
objSelection.MoveLeft
objSelection.HomeKey Unit:=wdLine
objSelection.EndKey Unit:=wdLine, Extend:=wdExtend
objDoc.Bookmarks.Add Name:="BMrk" + CStr(o), Range:=objSelection
objSelection.Copy
ActiveSheet.Range("Q" + CStr(o)).Select
ActiveSheet.PasteSpecial Format:="Hyperlink", Link:=False, DisplayAsIcon _
:=False
objSelection.MoveRight

"objSelection.Style = ActiveDocument.Styles("Paragraph")
objSelection.TypeText text:=Range(DescriptionCol + CStr(cell.Row)).Value
objSelection.TypeParagraph
End If

o = o + 1

Next cell


MyErrorHandler:
MsgBox "SeeHeadingPageNumber" & vbCrLf & vbCrLf & "Err = " & Err.Number & vbCrLf & "Description: " & Err.Description

Además, independientemente del rango exR que defina, completa la ejecución de todo el rango, pero al final se invoca a MyErrorHandler, no entiendo por qué. ¿Hay alguna razón para ello?

Por favor, amigos, ayúdenme ... su ayuda es muy apreciada. Gracias por adelantado

Respuestas

6 para la respuesta № 1

Tienes dos referencias no calificadas a objetos de Word:

objSelection.Style = ActiveDocument.Styles("Heading 1")

Lo que aparece dos veces, necesita ser:

objSelection.Style = objWord.ActiveDocument.Styles("Heading 1")

De lo contrario, está creando una referencia implícita a Word que no puede destruir en su código.


4 para la respuesta № 2

Primero debe asegurarse de que no hay oprhan winword.exe en el administrador de tareas. Matar entonces o cerrar sesión / entrar para deshacerse de ellos.

Luego, debe agregar algo como este código al final de la palabra de cierre "explícitamente":

(No estoy seguro de la sintaxis exacta, espero que puedas resolverlo)

IF Not(objWord Is Nothing) Then

objWord.Close(False)
Set objWord = Nothing

End If

Debe agregar algo similar a su controlador de errores.

Lo que sucede a menudo es durante el desarrollo y la depuración, a veces las palabras no se "cierran correctamente" y los procesos "huérfanos" permanecen inactivos aunque no sean visibles.

También puede desear utilizar

Set objWord = New Word.Application

en lugar de

Set objWord = CreateObject("Word.Application")

Como eso te da autocompletado etc.

Pero hay ventajas en cada área.