Fermer Objet de Powerpoint avec Excel VBA (PAS à l'aide de Powerpoint.Demande)
En espérant que quelqu'un peut m'aider avec du code VBA. J'utilise VBA boucle pour coller des tableaux Excel, des zones de texte et des tableaux dans un modèle de présentation Powerpoint. Cependant, parce que je ne peux pas être sûr que l'utilisateur aura la Bibliothèque d'Objet Powerpoint installé, je ne peux pas utiliser le Dim PPTApp comme Powerpoint.Type d'Application de la syntaxe.
J'utilise des objets. Il fonctionne très bien. Sauf pour une pièce: la fermeture de Powerpoint.
Code:
Dim oPPTPres As Object ' Late binding: This is a PowerPoint.Presentation but we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTShape As Object ' Late binding: This is a PowerPoint.Shapebut we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
PPTFile = Range("PPTFile").value ' Read PowerPoint template file name
Set oPPTPres = GetObject(PPTFile): oPPTPres.Application.Visible = msoTrue ' Switch to or open template file
.
.
.
.
strNewPresPath = Range("OutputFileName").value
oPPTPres.SaveAs strNewPresPath
' Range("PPTFile").value = strNewPresPath
ScreenUpdating = True
oPPTPres.Close 'Closes presentation but not Powerpoint
oPPTPres.Application.Quit 'No noticeable effect
La présentation active va fermer, mais Powerpoint lui-même reste ouvert (pas de fichier de la fenêtre ouverte). Ensuite, parce qu'elle est ouverte, si le prochain court (j'ai une boucle qui passe en boucle sur et à faire beaucoup de ces versions dos-à-dos), il ouvre le modèle ainsi que les dernières construit fichier Powerpoint, création de système de verrouillage de problèmes.
Des idées?
Merci beaucoup pour votre aide!
OriginalL'auteur JMP | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas entièrement sûr de savoir pourquoi votre code ne fonctionne pas. J'ai tenté de
oPPTPres = Nothing
comme l'a suggéré, ce qui n'a pas fonctionné non plus. Cependant, la façon suivante PowerPoint ferme sur mon ordinateur...
Fonctionne comme un charme. Merci beaucoup, Paul. Je l'apprécie vraiment!
OriginalL'auteur Paul B.
JMP,
Sean est correct en termes de suppression d'objets de la mémoire, mais vous devez vous assurer de communiqué toutes les références directes à votre objet de powerpoint ainsi, dans le cas où vous stocker le pointeur de votre powerpoint en d'autres variables. Cependant, cela ne va pas tuer l'application et arrêter le fil - il simplement de libérer vos variables d'application.
Paul B de la méthode de l'arrêt de powerpoint devrait fonctionner correctement, et ce DONC, l'Article a une méthode douce et un la force brute de la méthode de la fermeture des applications si elles restent dans la mémoire.
J'ai adapté et testé cette simple bruteforce méthode relativement autorisations limitées sur ma machine à partir d'Excel, et il a tué l'application Powerpoint immédiatement:
De sorte que vous fournit une autre option pour le meurtre de l'application.
Set oPPTPres = Nothing
et encore PowerPoint ne serait pas fermer.Paul B, vous êtes en droit - réglage de la variable à
Nothing
libère la variable de ne pas tuer l'application. Je vais modifier ma réponse en conséquence.J'ai édité ma réponse et une autre, plus brutale de la méthode de mise à mort de l'application.
Merci JackOrangeLantern. J'ai utilisé le même lot de scripts pour tuer les applications mais n'était pas au courant, je pourrais les utiliser en VBA. Et n'y pense même pas, franchement. Je vais essayer cela et revenir à la marque, ce un succès si elle fonctionne vraiment pour moi. Je vous remercie encore.
Jack, cela fonctionne très bien. Je vous remercie beaucoup. J'ai l'impression que je dois donner à Paul le vérifier, si, comme il a été premier. Merci beaucoup pour votre aide, cependant. Génial d'apprendre que VBA permet d'exécuter des fonctions d'interpréteur de commandes comme ça. Aideront certainement dans l'avenir.
OriginalL'auteur JackOrangeLantern
Je crois que tous les autres affiches sont au moins partiellement correcte.
Paul B. la réponse devrait fonctionner dans la plupart des cas.
Le seul inconvénient sera si vous avez yor powerpoint VBA code appelé directement à partir du formulaire utilisateur ou un objet qui est directement référencé par le formulaire utilisateur.
Dans ce cas il y a toujours un objet de référence en attente d'être supprimé de la mémoire.
Déplacer tous vos VBA powerpoint code d'un module et de cacher l'objet userform avant le coup d'envoi de l'automatisation (powerpoint) code.
OriginalL'auteur Anonymous Type
Set oPPTPres = Nothing
devrait supprimer la référence Excel a de l'objet, et (espérons-le) de la libérer de la mémoireOriginalL'auteur SeanC