|
在运行使用自动化功能控制 Word 的 Visual Basic 代码时,可能会收到“Run-time error '-2147023174' (800706ba)”(运行时错误“-2147023174”(800706ba))错误消息或“Run-time error '462'”(运行时错误“462”)错误消息
症状:
错误消息 1
运行时错误“-2147023174”(800706ba)
自动化错误
错误消息 2
运行时错误“462”: 远程服务器计算机不存在或不可用
原因:
由于某行代码调用了 Word 对象、方法或属性但未使用 Word 对象变量对其进行限定,因此 Visual Basic 已设定对 Word 的引用。在结束程序之前,Visual Basic 不会释放此引用。在多次运行该代码时,此错误的引用会妨碍自动化代码的执行。
解决方案:修改该代码,以便对 Word 对象、方法或属性的每次调用都使用相应的对象变量进行限定。
症状:这种现象是设计导致的。
更多的信息:
要使 Word 实现自动化,您应设定一个通常引用 Word Application 或 Document 对象的对象变量。然后,可将其他对象变量设置为引用 Word 对象模型中的 Selection、Range 或其他对象。在编写代码以使用 Word 对象、方法或属性时,应总是在调用前使用适当的对象变量。否则,Visual Basic 会使用隐藏的全局变量引用,它已将该变量设置为引用当前运行的实例。如果关闭了 Word 或释放了声明的对象变量,则隐藏的全局变量现在将引用无效(已损坏)对象。再次运行自动化代码时,对此隐藏对象变量的调用将会失败,并出现上述错误。
下列步骤演示重现此问题以及纠正此问题的方法。
-----------------------------------------------
以下步骤演示了重现此问题以及纠正此问题的方法。
重现问题的步骤:
1、在 Visual Basic 中启动一个新的标准 EXE 项目。默认情况下会创建 Form1。
2、在“项目”菜单中单击“引用”,然后单击下列任一选项:
对于 Office Word 2007,单击“Microsoft Word 12.0 Object Library”
对于 Word 2003,单击“Microsoft Word 11.0 Object Library”
对于 Word 2002,单击“Microsoft Word 10.0 Object Library”
对于 Word 2000,单击“Microsoft Word 9.0 Object Library”。
对于 Word 97,单击“Microsoft Word 8.0 Object Library”。
3、在 Form1 上放置一个“CommandButton”控件。
4、将以下代码示例复制到 Form1 的代码窗口。
Option Explicit
Private Sub Command1_Click()
Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim oRange as Word.Range
Set oWord = CreateObject("Word.Application")
With oWord
.Visible = True
.Activate
.WindowState = wdWindowStateNormal
End With
Set oDoc = oWord.Documents.Add
MsgBox "Document open", vbMsgBoxSetForeground
With oDoc
.PageSetup.LeftMargin = InchesToPoints(1.25)
End With
' This example inserts text at the end of section one.
Set oRange = ActiveDocument.Sections(1).Range
With oRange
.MoveEnd Unit:=wdCharacter, Count:= -1
.Collapse Direction:=wdCollapseEnd
.InsertParagraphAfter
.InsertAfter "End of section."
End With
With oDoc
.Saved = True
End With
Set oRange = Nothing
Set oDoc = Nothing
oWord.Quit
Set oWord = Nothing
End Sub
5、在“运行”菜单上单击“启动”,或者按 F5 启动程序。
6、单击 CommandButton。没有发生任何错误。但是,现在已经创建了一个对 Word 的引用,而且没有释放该引用。
7、再次单击 CommandButton,注意您会收到如上所述的错误。
注意:出现该错误的原因是,代码引用 InchesToPoints 方法时,未在调用前放置 oWord 对象变量。
8、停止项目并更改以下代码行:
.PageSetup.LeftMargin = InchesToPoints(1.25)
将该行代码更改为类似于如下代码行:
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
9、再次运行该程序。然后,单击 CommandButton。没有发生任何错误。
10、再次单击 CommandButton,注意您会收到错误。
注意:出现该错误的原因是,代码引用 ActiveDocument Section 1 的 Range 对象时,未在调用前放置 oWord 对象变量。
11、停止该项目并将下面的代码行:
Set oRange = ActiveDocument.Sections(1).Range
更改为
Set oRange = oWord.ActiveDocument.Sections(1).Range
12、再次运行该程序。注意,您可以多次运行该代码而不会出现错误。
在构建实现 Word 自动化的 Visual Basic 项目时,如果您的项目引用了 Microsoft Word 对象库,则可以从 Word“帮助”文件中获取 Word 对象模型的这些对象、方法和属性的示例代码。当光标移到代码中的某个关键字上时,通过按 F1 键,您将看到任何适用的帮助文本。
|
|