Comment créer une instance d'une autre application Office et le fermer de manière sûre que si vous l'avez démarré

Traductions disponibles Traductions disponibles
Numéro d'article: 555191 - Voir les produits auxquels s'applique cet article
Auteur: Tushar Mehta MVP
Agrandir tout | Réduire tout

Conseils

Comment créer une instance d'une autre application Office et le fermer de manière sûre que si vous l'avez démarré

Auteur
< STRONG/ > Tushar Mehta est l'auteur de ce conseil. Vous pouvez l'atteindre par l'intermédiaire de son site Web : www.tushar-mehta.com
 
Introduction <STRONG />
Au-dessus de fois à utiliser le code VBA dans une programme Office pour automatiser un autre programme similaire a devenu de plus en plus plus facile. Tel que par exemple une seule instruction
XlApp défini = Excel.Application nouveau
Il y a tout qui est requis pour exécuter Excel. Cependant il existe certains effets secondaires unpleasant qui peuvent hurt le développeur unwary pour toute sa facilité. Ce conseil résout deux problèmes tels.
 
Avant d'accéder au problème d'effets secondaires la question de la liaison contr' une liaison tardive anticipée existe cependant. L'instruction précédente impose l'utilisation de la liaison anticipée et dans certains cas dans lesquels n'est peut-être pas si souhaitable. Ce conseil résout seulement les effets secondaires unpleasant, mais utilise également la liaison anticipé et récent.
 
Une fois qu'un programme est démarré instancié (un programme été avec l'instruction Set précédente) il est la responsabilité le gérant de développeur. Pour les applications (telles qu'Excel) qui peuvent avoir plusieurs copies simultanées d'être en cours d'exécution chaque exécution d'une instruction similaire à une le au-dessus de démarre une nouvelle copie ! Comme il est donc chaque copie avec une instruction s'exécutant de terminer comme la responsabilité de développeur
xlApp.Quit
 
Une autre mémoire sera litter avec copies orphelines du programme qui peut qu'être terminé à travers le Gestionnaire des tâches de Windows (activé avec CTRL + ALT + SUPPR).
 
En revanche pour une application (tel que PowerPoint) qui peut avoir qu'une copie d'être en cours d'exécution une instruction similaire à l'instruction Set précédente connectera à la copie déjà fonctionnant si une est présent. Un .Quit suivant sera plus gênant pour un utilisateur qui le programme a démarré et l'utilise pour effectuer certain travail !
 
A solution addressing both problems
L'instruction Set utilisée au-dessus de contrairement à, il est possible de différencier vous connecter à une copie déjà fonctionnant et vous connecter à une copie du programme démarrée nouvellement avec l'utilisation des fonctions GetObject() et CreateObject() VB. Il est également possible de décider de terminer le programme être en mesure à le distinguer entre le moyen de deux conditions.
 
Dans le code suivant, enveloppé par utilisations liant tôt la fonction GetObject() de à l'intérieur d'une erreur, le gestionnaire sera connecté en haut d'à une copie de l'application (PowerPoint dans ce cas) déjà fonctionnant. Si quand même le ppApp variable ne rien est après la fonction GetObject(), il n'y a aucune copie de PowerPoint étant déjà en cours d'exécution clairement. Ainsi la fonction CreateObject() démarre l'application et obtient une référence à cette copie just-started. Dans ce cas le code définit également l'indicateur IStartedPP.
 
Une fois que le développeur est fait tout travail devoir être effectué avec, l'indicateur IStartedPP est un rappel de ce code avoir que démarrer ou non la toute application de. Si est allé est indiqué à l'autre application se fermant. Enfin la variable ppApp est définie finalement et inconditionnellement sur Nothing.
 
Option Explicit
Sub StartOtherApp()
    Estompez ppApp As PowerPoint.Application, IStartedPP As Boolean
    On Error Resume Next
    PpApp défini = GetObject(, "powerpoint.application")
    Sur Error GoTo 0
    Si ppApp est Nothing Then
        IStartedPP = true
        PpApp défini = CreateObject("powerpoint.application")
        End If
    '?
    ' Vous effectuez tout truc
    '?
    Si IStartedPP Then
        ppApp.Quit
        End If
    PpApp défini = Nothing
    End Sub
 
Final Note
Le code dans cet info-bulle pose la question de nettoyer correctement après un lorsque certain qui peut, établissant une connexion avec d'autres applications, déjà être démarrée et lorsqu' autres peuvent être lancés par le code. En outre le code fonctionne avec des clients à la liaison anticipée et la liaison tardive.
< STRONG/ > 
Références :
Une introduction à la liaison anticipée et une liaison tardive :
Liaison avancée ou tardive
</U> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/SF7A4.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/office97/html/SF7A4.asp
Automatiser une application Office d'autre :
Creation of Object Variables to Automate Another Office Application
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deconcreatingobjectvariabletoautomateanotherofficeapplication.asp
Une application ne se ferme pas pourquoi même lorsqu' lui est indiqué disparaissant :
Program won't quit
http://www.tushar-mehta.com/excel/vba/xl_doesnt_quit/index.htm
 
 

Propriétés

Numéro d'article: 555191 - Dernière mise à jour: vendredi 3 septembre 2004 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic for Applications 6.0
Traduction automatique
TRADUCTION AUTOMATIQUE : Cet article technique a été traduit par un système automatique, c'est-à-dire sans aucune intervention humaine. Microsoft propose ce type d?articles en complément de ceux traduits par des traducteurs professionnels. Ces articles sont destinés principalement aux utilisateurs ne comprenant pas l'anglais en leur proposant, en complément, une version française de l?information technique fournie dans la version américaine et originale de l?article. Pour plus de détails, veuillez consulter la page http://support.microsoft.com/gp/mtdetails. Attention : Il est possible que certaines parties de l?article ne soient pas traduites par le système automatique et qu?elles soient restées rédigées en anglais. Microsoft ne garantit pas la qualité linguistique des traductions et ne peut être tenu responsable d?aucun problème, direct ou indirect, dû à une quelconque erreur de traduction du contenu ou de son utilisation par les utilisateurs.
La version anglaise de cet article est la suivante: 555191
EXCLUSION DE RESPONSABILITÉ DE COMMUNITY SOLUTIONS
Clause limitative de responsabilité MICROSOFT CORPORATION ET/ OU SES FOURNISSEURS RESPECTIFS NE GARANTISSENT EN AUCUNE FACON LE CARACTERE ADAPTE, FIABLE OU EXACT DES INFORMATIONS ET ELEMENTS GRAPHIQUES CONNEXES. L?ENSEMBLE DE CES INFORMATIONS ET ELEMENTS GRAPHIQUES CONNEXES EST FOURNI "EN L?ETAT", SANS GARANTIE DE QUELQUE NATURE QUE CE SOIT. MICROSOFT CORPORATION ET/ OU SES FOURNISSEURS RESPECTIFS EXLUENT EXPRESSEMENT TOUTES GARANTIES ET CONDITIONS SUR CES INFORMATIONS ET ELEMENTS GRAPHIQUES CONNEXES, ET NOTAMMENT DE TOUTES GARANTIES IMPLICITES QUANT A LEUR CONFORMITE A LEUR DESTINATION COMMERCIALE, A LEUR ADEQUATION A UN BUT DETERMINE, AU RESPECT DES REGLES DE L?ART, A L?EXISTENCE D?UN DROIT DE PROPRIETE ET D?ABSENCE DE CONTREFACON. VOUS VOUS ENGAGEZ EN PARTICULIER A CE QUE NI MICROSOFT NI SES FOURNISSEURS NE SOIENT EN AUCUN CAS TENUS POUR RESPONSABLES DE TOUT DOMMAGE DIRECT, INDIRECT, PUNITIF, INCIDENT, SPECIAL, OU ACCESSOIRE, NI REDEVABLE DE DOMMAGES ET INTERETS QUELS QU?ILS SOIENT, Y COMPRIS, SANS LIMITATION AUCUNE, DE TOUTE INDEMNISATION POUR PERTE DE DONNEES OU DE PROFIT OU POUR IMPOSSIBILITE D?UTILISATION, RESULTANT DE L?UTILISATION OU DE L?IMPOSSIBILITE D?UTILISATION DES INFORMATIONS OU ELEMENTS GRAPHIQUES CONNEXES TELS QUE VISES AUX PRESENTES, QUE CETTE ACTION SOIT CONTRACTUELLE OU DELICTUELLE, FONDEE SUR LA RESPONSABILITE SANS FAUTE OU SUR TOUT AUTRE MOTIF, ET MEME SI MICROSOFT OU L?UN QUELCONQUE DE SES FOURNISSEURS AVAIT ETE AVISE AU PREALABLE DE LA POSSIBILITE D?UN TEL PREJUDICE.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com