运行到错误462:通过Excel VBA使用WORD时,远程服务器计算机不存在

时间:2014-09-25 04:32:29

标签: excel vba excel-vba

我一直在尝试在excel vba中以编程方式打开word文件,并使用书签在其中添加/编辑内容。但是,我发现在备用运行中,我得到了错误462:远程服务器不存在"错误。我研究了很多,并且理解这有事情要做'不合格的参考文献;。

但是我不明白如何将下面的代码片段更正为合格的引用?有人可以帮忙吗?

        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

另外,无论我定义的exR范围如何,它都会完成整个范围的执行,但最后会调用MyErrorHandler,我不明白为什么?这有什么理由吗?

请大家帮帮我...非常感谢你的帮助。 提前致谢

3 个答案:

答案 0 :(得分:10)

您有两个对Word对象的非限定引用:

objSelection.Style = ActiveDocument.Styles("Heading 1")
出现两次的

需要:

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

否则,您正在创建一个隐含的Word引用,您无法在代码中销毁它。

答案 1 :(得分:5)

首先应确保任务管理器中没有oprhan winword.exe。杀死然后退出/退出以消除它们。

然后,您应该添加类似此代码的内容,以便最终获得&#39; explcitly&#39;关闭词:

(我不确定确切的语法,希望你能解决它)

IF Not(objWord Is Nothing) Then

    objWord.Close(False)
    Set objWord = Nothing

End If

您应该添加与错误处理程序类似的内容。

经常发生的事情是在开发和调试过程中,有时候单词没有正确关闭,并且“孤儿”也是如此。即使它们不可见,它们也会流连。

您可能还希望使用

Set objWord = New Word.Application

而不是

Set objWord = CreateObject("Word.Application")

因为它可以让你自动完成等等。

但每种方式都有区域优势。

答案 2 :(得分:1)

  

[已解决] 错误462 –“远程服务器计算机不存在或不可用”

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