DOCUMENT:Q189618 17-JUL-1998 [vbwin] TITLE :PRB: Automation Error Calling Unqualified Method or Property PRODUCT :Microsoft Visual Basic for Windows PROD/VER:WINDOWS:4.0,5.0,97 OPER/SYS:WINDOWS KEYWORDS: ====================================================================== --------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, version 5.0 - Microsoft Visual Basic Standard, Professional, and Enterprise Editions for Windows, version 4.0 - Microsoft Word 97 for Windows - Microsoft Visual Basic for Applications version, 5.0 --------------------------------------------------------------------- SYMPTOMS ======== While running code that uses Automation to control Microsoft Word 97, 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 97 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 97, 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 97 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 --------------------------- 1. Start a new Standard EXE project in Visual Basic. Form1 is created by default. 2. Click References from the Project menu and check "Microsoft Word 8.0 Object Library." 3. Place a CommandButton on Form1. 4. 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 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. On the Run menu, click Start or press the F5 key to start the program. 6. Click the CommandButton. No error occurs. However, a reference to Word 97 has been created and has not been released. 7. 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. 8. Stop the project and change the following line: .PageSetup.LeftMargin = InchesToPoints(1.25) to: .PageSetup.LeftMargin = oWord.InchesToPoints(1.25) 9. Run the program again. Then, click the CommandButton. No error occurs. 10. 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. 11. Stop the project and change the following line: Set oRange = ActiveDocument.Sections(1).Range to: Set oRange = oWord.ActiveDocument.Sections(1).Range 12. 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 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: ARTICLE-ID: Q178510 TITLE : PRB: Excel Automation Method of Object '_Global' Failed ARTICLE-ID: Q167223 TITLE : Microsoft Office 97 Automation Help File Available on MSL Additional query words: activex OLE kbDSupport kbDSD kbVBp kbVBp400 kbVBp500 kbVBA kbActiveX kbOLE kbAutomation ====================================================================== Version : WINDOWS:4.0,5.0,97 Platform : WINDOWS Issue type : kbprb ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 1998.