我一直试图在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
Run Code Online (Sandbox Code Playgroud)
另外,无论我定义的exR范围如何,它都会完成整个范围的执行,但最后调用了MyErrorHandler,我不明白为什么?有原因吗?
请大家帮帮我...非常感谢你的帮助.提前致谢
Ror*_*ory 10
您有两个对Word对象的非限定引用:
objSelection.Style = ActiveDocument.Styles("Heading 1")
Run Code Online (Sandbox Code Playgroud)
出现两次,需要:
objSelection.Style = objWord.ActiveDocument.Styles("Heading 1")
Run Code Online (Sandbox Code Playgroud)
否则,您正在创建一个隐含的Word引用,您无法在代码中销毁它.
您首先应确保winword.exe任务管理器中没有操作。然后杀死或注销/注销以摆脱它们。
然后,您应该在代码末尾添加“类似”这样的代码:
(我不确定确切的语法,希望您能解决这个问题)
IF Not(objWord Is Nothing) Then
objWord.Close(False)
Set objWord = Nothing
End If
Run Code Online (Sandbox Code Playgroud)
您应该添加类似于错误处理程序的内容。
经常发生的是在开发和调试过程中,有时单词无法正确关闭,即使“孤儿”进程不可见,它们也会四处徘徊。
您可能还希望使用
Set objWord = New Word.Application
Run Code Online (Sandbox Code Playgroud)
代替
Set objWord = CreateObject("Word.Application")
Run Code Online (Sandbox Code Playgroud)
因为它可以自动完成等。
但是每种方式都有区域优势。
| 归档时间: |
|
| 查看次数: |
41307 次 |
| 最近记录: |