Numéro d'article: 288902 - Dernière mise à jour: mercredi 31 janvier 2007 - Version: 9.3

Comportement de GetObject et CreateObject des serveurs automation Office

Sommaire

Agrandir tout | Réduire tout

Résumé

Cet article décrit les différents comportements de se produisent lorsque vous utilisez les fonctions GetObject et CreateObject avec différentes versions d'applications Microsoft Office. GetObject et CreateObject sont des fonctions qui sont fournies par Microsoft Visual Basic et Microsoft Visual Basic pour Applications (VBA). Cependant, les informations sont également applicables à Microsoft Visual C++ si vous considérez les références fonction GetObject en tant qu'appels GetActiveObject API et les références à CreateObject que les appels à la fonction CoCreateInstance API.

Plus d'informations

GetObject

GetObject est utilisé pour associer à une instance en cours d'exécution d'un serveur automation. Il existe quelques manières différentes d'appeler GetObject , mais la syntaxe est recommandée pour Microsoft Office applications est la suivante :
set xlApp = GetObject(, "Excel.Application")
				
si une instance de Microsoft Excel est en exécution lorsque le code est exécuté, vous avez accès à modèle d'objet l'instance en cours d'exécution par le biais de la variable xlApp. Si aucune instance s'exécute, vous recevez le message d'erreur run-time récupérable suivantes :
Erreur d'exécution '429' :
Le composant ActiveX ne peut pas créer l'objet
Si exécutent plusieurs instances de Microsoft Excel, GetObject joint à l'instance qui est lancé en premier. Si vous fermez puis la première instance, un autre appel de GetObject attache à la deuxième instance qui a été lancée et ainsi de suite.

Vous pouvez joindre à une instance spécifique si vous connaissez le nom d'un document ouvert dans cette instance. Par exemple, si une instance d'Excel s'exécute avec un classeur ouvert nommé Book2, le code suivant attache avec succès à cette instance même si elle n'est pas l'instance première qui a été lancé :
Set xlApp = GetObject("Book2").Application
				

CreateObject

CreateObject utilisé pour démarrer une nouvelle instance d'un serveur Automation. Par exemple :
set xlApp = CreateObject("Excel.Application")
				
selon que le serveur est conçu comme SingleUse ou MultiUse, un autre processus serveur peut ou peut ne pas être lancé. Cela peut être une différence importante pour décider si vous devez forcer arrêter une Automation instance. Par exemple, avec un serveur MultiUse, si une instance est en cours d'exécution avant de joindre, puis vous peut-être souhaitez éviter l'arrêt du serveur par programme lorsque vous avez terminé l'automatisation il.

Le tableau suivant sert de référence utile lors de l'implémentation d'une solution avec Microsoft Office. Il répertorie les comportements et attributs des versions différentes et des applications de Microsoft Office, telles que la valeur par défaut si le serveur est soit visible au démarrage, s'il s'agit SingleUse ou MultiUse, si elle possède un contrôle UserControl propriété, si elle possède une méthode Quit et le nom de classe pour la fenêtre principale.

Réduire ce tableauAgrandir ce tableau
ApplicationsVisibleInstanciationA ContrôleUtilisateur (UserControl)A la fermetureClassName
Excel 97, 2000, 2002, 2003, 2007NonSingleUseOuiOuiXlMain
Word 97, 2000, 2002, 2003, 2007NonSingleUseOuiOuiOpusApp
PowerPoint 97NonMultiUseNonOuiPP97FrameClass
PowerPoint 2000NonMultiUseNonOuiPP9FrameClass
PowerPoint 2002NonMultiUseNonOuiPP10FrameClass
PowerPoint 2003NonMultiUseNonOuiPP11FrameClass
PowerPoint 2007NonMultiUseNonOuiPP12FrameClass
Access 97OuiSingleUseOuiOuiOMain
Access 2000, 2002, 2003, 2007NonSingleUseOuiOuiOMain
Projet 98, 2000NonMultiUseOuiOuiJWinproj-WhimperMainClass

Le nom de classe de la fenêtre principale est utile pour appel FindWindow API lorsque vous souhaitez savoir facilement si n'importe quelle instance est déjà en cours d'exécution. L'objet UserControl propriété est une propriété booléenne qui indique si l'application serveur automatiquement arrête lorsque la dernière référence est publié (ensemble sur nothing). La méthode Quit permet de remplacer la propriété UserControl dans les cas où il est nécessaire (tels que lorsqu'une instance ne s'arrête pas après la dernière référence).

En règle générale, Microsoft recommande d'utiliser une nouvelle instance d'une application Office au lieu de lier à une instance de l'utilisateur peut utiliser. Il est mieux créer une instance en utilisant le ProgID application, ouvrir ou créer des objets à partir de là. Autres ProgID, notamment Excel.Sheet Word.Document et ainsi de suite, est conçus pour être utilisés dans OLE (liaison d'objet and Embedding) et peut donner des résultats incohérents lorsqu'elle est utilisée avec la fonction CreateObject . En utilisant le ProgID application, vous éviter les problèmes potentiels en démarrant explicitement le serveur pour l'automatisation (Embedding).

Lorsque vous avez terminé avec le serveur Automation, libérer toutes vos références et appelle sa méthode Quit (si disponible) afin que le serveur arrête normalement. Si vous souhaitez configurer une instance par l'intermédiaire d'Automation et puis laissez-la ouverte pour l'utilisateur à utiliser, vous devez définir la propriété UserControl sur TRUE et puis relâchez vos références. Le serveur puis reste en cours d'exécution (parce que la propriété UserControl est TRUE ) et s'arrête correctement lorsque l'utilisateur ferme l'application (car il n'existe aucune référence en attente).

note Pour que Word, la propriété UserControl est en lecture seule. Elle ne peut pas être définie sur True ou False. Word toujours reste l'exécution à la dernière référence est libérée.

Références

Pour plus d'informations sur l'utilisation de GetObject/CreateObject et en savoir plus sur certaines exceptions et des problèmes liés à l'utilisation de Automation pour Microsoft Office, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft. :
222783  (http://support.microsoft.com/kb/222783/ ) PPT2000 : CreateObject ne créer pas de nouvelle session de PowerPoint
188546  (http://support.microsoft.com/kb/188546/ ) BOGUE : démarrage manuel de Word utilise la même instance comme Automation
265385  (http://support.microsoft.com/kb/265385/ ) INFO : Automatisation de PowerPoint 97 et PowerPoint 2000 Aperçu
259940  (http://support.microsoft.com/kb/259940/ ) BOGUE : Word 2000 ne pas quitter lorsque Keybindings.ClearAll est appelée
258511  (http://support.microsoft.com/kb/258511/ ) Comment faire pour obtenir le handle de fenêtre à l'application Office pour l'automatisation de
249169  (http://support.microsoft.com/kb/249169/ ) PPT97 : PowerPoint 97 reste en mémoire après la récupération d'une présentation et fermé en cours
159922  (http://support.microsoft.com/kb/159922/ ) À l'aide de XL97 : méthode quitter peut provoquer des opération non valide

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002
  • Microsoft Excel 2000 Standard
  • Microsoft Excel 97 Standard
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard
  • Microsoft PowerPoint 2000 Standard
  • Microsoft PowerPoint 97 Standard
  • Microsoft Project 2000 Standard
  • Microsoft Project 98 Standard
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
Mots-clés : 
kbmt kbautomation kbinfo KB288902 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 288902  (http://support.microsoft.com/kb/288902/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
 

Traductions disponibles

 

Newsletter Office :