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 № 1Tienes 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.