Symptômes
Lors de l’exécution de code qui utilise Automation pour contrôler Microsoft Excel, l’une des erreurs suivantes peut se produire :
Dans Microsoft Excel 97 et dans les versions ultérieures d’Excel, vous recevez l’un des messages d’erreur suivants :
Message d’erreur 1
Erreur d’exécution « 1004 » :
Échec de la méthode « <nom de la méthode> » de l’objet « _Global »
Message d’erreur 2
Erreur définie par l’application ou par l’objet
Dans Microsoft Excel 95, vous recevez l’un des messages d’erreur suivants :
Message d’erreur 1
Erreur d’exécution « -2147023174 »
Erreur OLE Automation
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 à Excel en raison d’une ligne de code qui appelle un objet, une méthode ou une propriété Excel sans qualifier l’élément avec une variable objet Excel. 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
Pour résoudre ce problème, modifiez le code afin que chaque appel à un objet, une méthode ou une propriété Excel soit qualifié avec la variable objet appropriée.
État
Ce comportement est inhérent au produit.
Informations supplémentaires
Pour automatiser Microsoft Excel, vous établissez une variable objet qui fait généralement référence à l’objet Application Excel ou à l’objet Classeur Excel. D’autres variables d’objet peuvent ensuite être définies pour faire référence à une feuille de calcul, à une plage ou à d’autres objets dans le modèle objet Microsoft Excel. Lorsque vous écrivez du code pour utiliser un objet, une méthode ou une propriété Excel, vous devez toujours faire précéder l’appel de la variable objet appropriée. Si ce n’est pas le cas, Visual Basic établit sa propre référence à Excel. Cette référence peut entraîner des problèmes lorsque vous essayez d’exécuter le code Automation plusieurs fois. Notez que même si la ligne de code commence par la variable objet, un appel peut être effectué à un objet, une méthode ou une propriété Excel au milieu de la ligne de code qui n’est pas précédée d’une variable objet.
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.
-
Dans le menu Projet, cliquez sur Références, puis case activée la bibliothèque d’objets pour la version d’Excel que vous envisagez d’automatiser.
-
Placez un contrôle CommandButton sur Form1.
-
Copiez l’exemple de code suivant dans la fenêtre Code de Form1.
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub
-
Dans le menu Exécuter , cliquez sur Démarrer ou appuyez sur F5 pour démarrer le programme.
-
Cliquez sur le contrôle CommandButton . Aucune erreur ne se produit. Toutefois, une référence à Excel a été créée et n’a pas été publiée.
-
Cliquez à nouveau sur le contrôle CommandButton . Notez que vous recevez l’un des messages d’erreur abordés dans la section « Symptômes ».
Remarque Le message d’erreur se produit, car le code fait référence à la méthode de la cellule sans avoir précédé l’appel avec le
variable objet xlSheet. -
Arrêtez le projet et modifiez la ligne de code suivante :
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Modifiez la ligne de code pour qu’elle ressemble à la ligne de code suivante.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Réexécutez le programme. Notez que vous pouvez exécuter le code plusieurs fois sans recevoir de message d’erreur.
Références
189618 Vous pouvez recevoir le message d’erreur « Erreur d’exécution « -2147023174 » (800706ba) » ou « Erreur d’exécution « 462 » lorsque vous exécutez du code Visual Basic qui utilise Automation pour contrôler Word