PRB: Automation Error Calling Unqualified Method or Property
ID: Q189618
|
The information in this article applies to:
-
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, versions 5.0, 6.0
-
Microsoft Visual Basic Standard, Professional, and Enterprise Editions for Windows, version 4.0
-
Microsoft Visual Basic for Applications version 5.0
-
Microsoft Office 2000 Developer
-
Microsoft Word 2000
-
Microsoft Word 97 for Windows
SYMPTOMS
While running code that uses Automation to control Microsoft Word 97 or Word 2000, you
may receive one of the following error messages:
Run-time error '-2147023174' (800706ba)
Automation error
-or-
Run-time error '462': The remote server machine does not exist or is
unavailable
CAUSE
Visual Basic has established a reference to Word due to a line of code
that calls a Word object, method, or property without qualifying it with
a Word object variable. Visual Basic does not release this reference
until you end the program. This errant reference interferes with automation
code when the code is run more than once.
RESOLUTION
Modify the code so that each call to a Word object, method, or property
is qualified with the appropriate object variable.
STATUS
This behavior is by design.
MORE INFORMATION
To automate Microsoft Word, you establish an object variable that
usually refers to the Word Application or Document object. Other object
variables can then be set to refer to a Selection, a Range, or other
objects in the Microsoft Word object model. When you write code to use a
Word object, method, or property, you should always precede the call with
the appropriate object variable. If you do not, Visual Basic uses a hidden
global variable reference which it sets to the currently running instance.
If Word is shutdown, or if the declared object variable is released, the
hidden global variable will now reference an invalid (i.e., destroyed)
object. When running the automation code again, calls to this hidden object
variable will fail with the aforementioned error.
The following steps illustrate how to reproduce this problem, and how to
correct it.
Steps to Reproduce Behavior
- Start a new Standard EXE project in Visual Basic. Form1 is created by
default.
- Click References from the Project menu and check "Microsoft Word 8.0
Object Library" for Word 97. For Word 2000, check "Microsoft Word 9.0 Object Library."
- Place a CommandButton on Form1.
- Copy the following code to the Code Window of 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
- On the Run menu, click Start or press the F5 key to start the program.
- Click the CommandButton. No error occurs. However, a reference
to Word 97 or 2000 has been created and has not been released.
- Click the CommandButton again and note that you receive the
error previously described.
NOTE: The error occurs because the code refers to the InchesToPoints
Method without preceding the call with the oWord object variable.
- Stop the project and change the following line:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-to-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
- Run the program again. Then, click the CommandButton. No error occurs.
- Click the CommandButton again and note that you receive the
error.
NOTE: The error occurs because the code refers to the ActiveDocument
Section one's Range object without preceding the call with the oWord
object variable.
- Stop the project and change the following line:
Set oRange = ActiveDocument.Sections(1).Range
-to-
Set oRange = oWord.ActiveDocument.Sections(1).Range
- Run the program again. Note that you can run the code multiple times
without error.
When building a Visual Basic project automating Word, if your project has a
reference to the Microsoft Word 8.0 or 9.0 Object Library, sample code for the
objects, methods, and properties of the Word Object Model is available from
the Word Help file. When the cursor is over a key word in your code, you
will see any applicable Help text by pressing the F1 key.
The sample code in the Help topic will be the Microsoft Word Visual Basic
for Applications code. It will not show the object references that your
Visual Basic code requires. You will need to add the qualifiers as
appropriate.
REFERENCES
For additional information, please see the following articles in the
Microsoft Knowledge Base:
Q178510
PRB: Excel Automation Method of Object '_Global'Failed
Q167223
Microsoft Office 97 Automation Help File Available
Additional query words:
activex OLE kbole kbActiveX kbAutomation kbVBp kbVBp400 kbVBp500 kbVBp600 kbWord
Keywords : kbGrpDSO kbOffice2000 kbVBA500 kbword2000
Version : WINDOWS:2000,4.0,5.0,6.0,97; :
Platform : WINDOWS
Issue type : kbprb