Symptômes
Lorsque vous exécutez du code Microsoft Visual Basic qui utilise Automation pour contrôler Microsoft Word, vous pouvez recevoir l’un des messages d’erreur suivants :
Message d’erreur 1
Erreur d’exécution « -2147023174 » (800706ba)
Erreur d’automatisation
Message d’erreur 2
Erreur d’exécution « 462 » : l’ordinateur serveur distant n’existe pas ou n’est pas disponible
Cause
Visual Basic a établi une référence à Word en raison d’une ligne de code qui appelle un objet, une méthode ou une propriété Word sans la qualifier avec une variable objet Word. Visual Basic ne publie pas cette référence tant que vous n’avez pas terminé le programme. Cette référence errante interfère avec le code d’automatisation lorsque le code est exécuté plusieurs fois.
Résolution
Modifiez le code afin que chaque appel à un objet, une méthode ou une propriété Word soit qualifié avec la variable objet appropriée.
État
Ce comportement est inhérent au produit.
Informations supplémentaires
Pour automatiser Word, vous établissez une variable objet qui fait généralement référence à l’Word’objet Application ou Document. D’autres variables d’objet peuvent ensuite être définies pour faire référence à une sélection, une plage ou d’autres objets dans le modèle objet Word. Lorsque vous écrivez du code pour utiliser un objet, une méthode ou une propriété Word, vous devez toujours faire précéder l’appel de la variable objet appropriée. Si ce n’est pas le cas, Visual Basic utilise une référence de variable globale masquée qu’il définit sur la instance en cours d’exécution. Si Word est arrêté ou si la variable objet déclarée est libérée, la variable globale masquée référence désormais un objet non valide (détruit). Lors de l’exécution à nouveau du code d’automatisation, les appels à cette variable objet masqué échouent avec l’erreur mentionnée ci-dessus.
Les étapes suivantes montrent comment reproduire ce problème et comment le corriger.
Étapes pour reproduire le comportement
-
Démarrez un nouveau projet EXE Standard en Visual Basic. Form1 est créé par défaut.
-
Cliquez sur Références dans le menu Projet , puis cliquez sur l’une des options suivantes :
-
Pour Office Word 2007, cliquez sur Bibliothèque d’objets Microsoft Word 12.0.
-
Pour Word 2003, cliquez sur Bibliothèque d’objets Microsoft Word 11.0.
-
Pour Word 2003, cliquez sur Bibliothèque d’objets Microsoft Word 10.0
-
Pour Word 2000, cliquez sur Bibliothèque d’objets Microsoft Word 9.0.
-
Pour Word 97, cliquez sur Bibliothèque d’objets Microsoft Word 8.0.
-
-
Placez un CommandButton sur Form1.
-
Copiez le code suivant dans la fenêtre Code de 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
-
Dans le menu Exécuter , cliquez sur Démarrer ou appuyez sur la touche F5 pour démarrer le programme.
-
Cliquez sur le bouton CommandButton. Aucune erreur ne se produit. Toutefois, une référence à Word a été créée et n’a pas été publiée.
-
Cliquez à nouveau sur le Bouton de commande et notez que vous recevez l’erreur décrite précédemment.
Remarque L’erreur se produit car le code fait référence à la méthode InchesToPoints sans avoir précédé l’appel avec la variable objet oWord. -
Arrêtez le projet et modifiez la ligne suivante :
.PageSetup.LeftMargin = InchesToPoints(1.25)
-À-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Réexécutez le programme. Cliquez ensuite sur le bouton CommandButton. Aucune erreur ne se produit.
-
Cliquez à nouveau sur commandButton et notez que vous recevez l’erreur.
Remarque L’erreur se produit car le code fait référence à l’objet Range de la section ActiveDocument 1 sans avoir précédé l’appel avec la variable objet oWord. -
Arrêtez le projet et modifiez la ligne suivante :
Set oRange = ActiveDocument.Sections(1).Range
-À-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Réexécutez le programme. Notez que vous pouvez exécuter le code plusieurs fois sans erreur.
Lors de la génération d’un projet Visual Basic automatisant Word, si votre projet a une référence à la bibliothèque d’objets Microsoft Word, l’exemple de code pour les objets, méthodes et propriétés du modèle objet Word est disponible à partir du fichier d’aide Word. Lorsque le curseur se trouve sur un mot clé dans votre code, vous voyez tout texte d’aide applicable en appuyant sur la touche F1.
L’exemple de code dans la rubrique d’aide sera le code Microsoft Word Visual Basic pour Applications. Il n’affiche pas les références d’objet requises par votre code Visual Basic. Vous devez ajouter les qualificateurs le cas échéant.
Références
Pour plus d’informations, consultez les articles suivants dans la Base de connaissances Microsoft :
178510 PRB : Échec de la méthode Excel Automation de l’objet '_Global'
Pour plus d’informations sur l’automatisation des applications Office, cliquez sur le numéro d’article ci-dessous pour afficher l’article dans la Base de connaissances Microsoft :