Symptomen
Wanneer u Microsoft Visual Basic-code uitvoert die gebruikmaakt van Automation om Microsoft Word te beheren, ontvangt u mogelijk een van de volgende foutberichten:
Foutbericht 1
Runtimefout '-2147023174' (800706ba)
Automatiseringsfout
Foutbericht 2
Runtimefout '462': de externe servercomputer bestaat niet of is niet beschikbaar
Oorzaak
Visual Basic heeft een verwijzing naar Word gemaakt vanwege een regel code die een Word-object, -methode of -eigenschap aanroept zonder deze te kwalificeren met een Word objectvariabele. Visual Basic geeft deze verwijzing pas vrij totdat u het programma hebt beëindigd. Deze foutieve verwijzing verstoort automatiseringscode wanneer de code meer dan één keer wordt uitgevoerd.
Oplossing
Wijzig de code zodat elke aanroep naar een Word-object, -methode of -eigenschap wordt gekwalificeerd met de juiste objectvariabele.
Status
Dit gedrag is inherent aan het ontwerp van het product.
Meer informatie
Als u Word wilt automatiseren, stelt u een objectvariabele in die meestal verwijst naar het Word-toepassings- of documentobject. Andere objectvariabelen kunnen vervolgens worden ingesteld om te verwijzen naar een selectie, een bereik of andere objecten in het Word objectmodel. Wanneer u code schrijft voor het gebruik van een Word-object, -methode of -eigenschap, moet u de aanroep altijd voorafgaan door de juiste objectvariabele. Als u dat niet doet, gebruikt Visual Basic een verborgen globale variabelereferentie die wordt ingesteld op de momenteel actieve instantie. Als Word wordt afgesloten of als de opgegeven objectvariabele wordt vrijgegeven, verwijst de verborgen globale variabele nu naar een ongeldig (vernietigd) object. Wanneer u de automatiseringscode opnieuw uitvoert, mislukken aanroepen naar deze verborgen objectvariabele met de eerder genoemde fout.
In de volgende stappen ziet u hoe u dit probleem reproduceert en hoe u dit kunt oplossen.
Stappen voor het reproduceren van gedrag
-
Start een nieuw Standard EXE-project in Visual Basic. Form1 wordt standaard gemaakt.
-
Klik op Verwijzingen in het menu Project en klik vervolgens op een van de volgende opties:
-
Voor Office Word 2007 klikt u op Microsoft Word 12.0-objectbibliotheek
-
Klik voor Word 2003 op Microsoft Word 11.0-objectbibliotheek
-
Klik voor Word 2003 op Microsoft Word 10.0-objectbibliotheek
-
Klik voor Word 2000 op Microsoft Word 9.0-objectbibliotheek.
-
Klik voor Word 97 op Microsoft Word 8.0-objectbibliotheek.
-
-
Plaats een commandbutton op Formulier1.
-
Kopieer de volgende code naar het codevenster van Formulier1:
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
-
Klik in het menu Uitvoeren op Start of druk op F5 om het programma te starten.
-
Klik op de knop Command. Er treedt geen fout op. Er is echter een verwijzing naar Word gemaakt en niet vrijgegeven.
-
Klik nogmaals op de opdrachtknop en houd er rekening mee dat u de eerder beschreven fout ontvangt.
Opmerking De fout treedt op omdat de code verwijst naar de methode InchesToPoints zonder voorafgaande aan de aanroep met de objectvariabele oWord. -
Stop het project en wijzig de volgende regel:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-Aan-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Voer het programma opnieuw uit. Klik vervolgens op de knop Command. Er treedt geen fout op.
-
Klik nogmaals op de knop Command en u ziet dat de fout wordt weergegeven.
Opmerking De fout treedt op omdat de code verwijst naar het object Bereik van de ActiveDocument-sectie zonder de aanroep te laten voorafgaan met de objectvariabele oWord. -
Stop het project en wijzig de volgende regel:
Set oRange = ActiveDocument.Sections(1).Range
-Aan-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Voer het programma opnieuw uit. Houd er rekening mee dat u de code zonder fouten meerdere keren kunt uitvoeren.
Wanneer u een Visual Basic-project bouwt dat Word automatiseert, en uw project een verwijzing bevat naar de Microsoft Word-objectbibliotheek, is voorbeeldcode voor de objecten, methoden en eigenschappen van het Word Objectmodel beschikbaar in het Help-bestand van Word. Wanneer de cursor boven een trefwoord in uw code staat, ziet u de toepasselijke Help-tekst door op F1 te drukken.
De voorbeeldcode in het Help-onderwerp is de Microsoft Word Visual Basic for Applications-code. De objectverwijzingen die uw Visual Basic-code vereist, worden niet weergegeven. U moet de kwalificaties indien nodig toevoegen.
Verwijzingen
Raadpleeg de volgende artikelen in de Microsoft Knowledge Base voor meer informatie:
178510 PRB: Excel Automation-methode van object '_Global' mislukt
Klik op het onderstaande artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven voor meer informatie over de Automatisering van Office-toepassingen: