我一直在尝试在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,我不明白为什么?这有什么理由吗?
请大家帮帮我...非常感谢你的帮助。 提前致谢
答案 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