Reputation: 626
I open a Word file programmatically in Excel VBA and add/edit contents using bookmarks.
I find that on alternate runs, I get
Error 462: The remote server does not exist
I researched and understood this has something to do with 'Unqualified references'.
I don't understand how to correct the code to qualified references.
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
Additionaly, whatever exR range I define, it completes execution for the entire range but at the end MyErrorHandler is invoked. Is there a reason for it?
Upvotes: 8
Views: 75406
Reputation: 9
I had the same problem when trying to set tabs programmatically. The error message "Error 462: The remote server does not exist" shows up every now and then, but never on the first run after a freshly started Access.
It seems that the global "CentimetersToPoints(5)" was causing the problem. i replaced
oRng.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(5), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpaces
by
Call oRng.Paragraphs.TabStops.Add(142, wdAlignTabLeft, wdTabLeaderSpaces)
Which performs the same but without errors
Upvotes: 0
Reputation: 159
[SOLVED] Err 462 – "The remote server machine does not exist or is unavailable"
ErrResume:
On Error GoTo ErrPaste
Set objDoc = objWord.Documents.Open(ExistingEvidenceDoc)
On Error GoTo 0
ErrPaste:
'The remote server machine does not exist or is unavailable
If Err.Number = 462 Then
Set wdApp = CreateObject("Word.Application")
Resume ErrResume
End If
Upvotes: 2
Reputation: 34075
You have two unqualified references to Word objects:
objSelection.Style = ActiveDocument.Styles("Heading 1")
which appears twice, needs to be:
objSelection.Style = objWord.ActiveDocument.Styles("Heading 1")
Otherwise you're creating an implicit reference to Word that you can't destroy in your code.
Upvotes: 11
Reputation: 19245
You should first ensure there are no oprhan winword.exe
in task manager. Kill then or log out/in to get rid of them.
Then you should add something like this code to the end to 'explcitly' close word:
(I'm not sure of the exact syntax, hopefully you can work it out)
IF Not(objWord Is Nothing) Then
objWord.Close(False)
Set objWord = Nothing
End If
You should add something similar to your error handler.
What often happens is during development and debugging, sometimes word doesn't get closed properly and 'orphan' processes hang around even though they are not visible.
You may also wish to use
Set objWord = New Word.Application
instead of
Set objWord = CreateObject("Word.Application")
as that gives you autocomplete etc.
But there area advantages to each way.
Upvotes: 5