Déterminer si un Outlook existant instance est ouverte
Après la lecture de comment utiliser automation pour envoyer un message, je suis pas clair de savoir si il est possible d'éviter l'ouverture d'une nouvelle instance de microsoft Outlook si je l'ai déjà ouvert. Si oui, je ne suis pas sûr de la façon de rechercher des exemples de déterminer si un Outlook existant instance est ouverte.
-----Y compris la suggestion--------
J'ai le fragment de code suivant, mais j'ai trouvé que je ne peux pas créer l'instance correctement. Je suis à la base suivantes cet exemple. Je suis arriver cette capture d'écran, ou l'erreur de "type défini par l'Utilisateur non défini". Des suggestions?
Sub Example()
'Dim w As Outlook.Application
Const ERR_APP_NOTRUNNING As Long = 429
On Error Resume Next
' Handle Microsoft outlook
Set w = GetObject(, "Outlook.Application")
If Err = ERR_APP_NOTRUNNING Then
'Set w = New Outlook.Application
Set w = CreateObject("Outlook.Application")
End If
End Sub
OriginalL'auteur stanigator | 2011-06-26
Vous devez vous connecter pour publier un commentaire.
Je vois dans votre question que vous avez commenté
sans doute parce que cela vous donne le "type défini par l'Utilisateur non défini" erreur.
C'est probablement parce que vous n'avez pas défini une référence à la bibliothèque Outlook dans votre Excel-VBA projet. Cela se fait comme suit: Outils > Références > cocher "Microsoft Outlook xx.x Object Library". Ensuite, vous pouvez écrire ce
qui, par la manière, les résultats au moment de la compilation (ou "précoce") de liaison. Et vous donne la
Outlook
objet intellisense.Alternativement, vous pouvez omettre le réglage de la référence et de déclarer
w
comme un objet générique et le laisser se lier au moment de l'exécutionmais d'exécution (ou "en retard") de liaison est de moins en moins efficace.
Faire ce qui se sent le mieux -- je vais aller de l'avant et de capital-risque que les chances sont, vous ne remarquerez pas la différence dans l'efficacité. Je suis un converti récent pour le début de la liaison de chose, vraiment tout simplement parce que de l'intellisense.
MODIFIER Donc, vous avez créé une nouvelle application Outlook, mais vous ne pouvez pas le voir. Si vous regardez dans le gestionnaire des tâches de Windows, vous allez voir que le processus est-il, en cours d'exécution, mais c'est juste l'affiche pas sur l'écran. Malheureusement, certaines brillant ingénieur chez Microsoft a décidé que Outlook ne devriez pas avoir un
Visible
propriété comme Word ou Excel faire, nous devons donc utiliser une mauvaise solution. Ouvrez l'un des dossiers spéciaux par exemple, la Boîte de réception comme ceci:Si vous avez beaucoup de différents/successifs des questions, s'il vous plaît poster chaque question individuellement. Je vais répondre à cette dernière dans une édition de ma réponse.
François Corbett: Merci pour le modifier. Je ne savais pas si ma question de suivi a été dans le même contexte de l'original, donc je l'ai ajouté dans les commentaires pour éviter de faire un doublon.
Le modifier au sujet de la visibilité était utile pour moi aujourd'hui. J'ai trouvé une approche plus générique qui utilise la propriété Parent qui peut être utile à d'autres personnes dans certaines situations, par exemple, Définir outApp = CreateObject("Outlook.L'Application") : Ensemble outMail = outApp.La méthode CreateItem(olMailItem) : outMail.Parent.Affichage
OriginalL'auteur Jean-François Corbett
Je sais que cette question a été posée, mais je pensais que je voudrais ajouter que les applications comme Outlook (et je crois que PowerPoint) sont en instance unique des applications -- il n'est pas nécessaire de déterminer si Outlook est déjà ouvert car vous ne pouvez avoir qu'une seule copie de Outlook en cours d'exécution.
http://msdn.microsoft.com/en-us/library/aa164542(v=office.10).aspx
Si vous avez besoin d'instancier Outlook, il suffit d'utiliser la fonction CreateObject pour créer l'instance; si Outlook est déjà en cours d'exécution, votre référence d'objet sera point à l'instance existante. Si non, vous allez créer la classe. De liaison (précoce ou tardif) n'est pas pertinente.
Par exemple, disons que Outlook n'est pas en cours d'exécution. Nous pouvons utiliser ce code pour créer l'instance:
Cette impression sera "Faux" parce que nous avons créé l'instance.
Disons que Outlook EST en cours d'exécution. Nous pouvons utiliser ce code pour vérifier que l'utilisation de la fonction GetObject et CreateObject fera référence à l'instance existante:
Cette impression sera "Faux" (instance existante), le "Faux" (notre prétendue "nouvelle instance"), mais la dernière boîte de message est "True", parce que la nouvelle instance est en fait le même objet que l'instance existante.
Alors, que faisons-nous si nous ne savons pas si Outlook est en cours d'exécution ou non? Comme démontré ci-dessus, CreateObject créé une nouvelle instance (si on n'existait pas, comme dans le premier exemple) ou accroché l'instance existante si Outlook est déjà ouvert (comme dans le deuxième exemple).
Il pourrait être l'instance unique, toutefois, j'ai une application VB6 où je laisse l'utilisateur envoyer un e-mail. Donc ce qui se passe c'est que j'ai Dim oApp comme Outlook.Application. Ensuite j'ai placé oApp que de Nouvelles Perspectives.Application, et cela fonctionne parfaitement bien sous Windows 7 (ayant des perspectives ouvertes), mais il ne fonctionne pas dans Windows 10 - il une idée?
Je sais que c'est une vieille question, mais je vois que vous avez été actif récemment... je ne suis pas convaincu que votre réponse est correcte. Cela pourrait-il avoir changé dans les versions plus récentes? Votre premier exemple de code renvoie la valeur FALSE à cause d'une faute de frappe: la variable n'est pas déclarée. Pourtant, lorsqu'fixe, il renvoie toujours FALSE indépendamment de savoir si il y a une instance existante de microsoft Outlook.
OriginalL'auteur JimmyPena
cela devrait se instance en cours d'exécution, si aucun n'est en cours d'exécution des captures d'erreur et ne CreateObject
Ne CreateObject jamais travaillé sur Outlook.Application ? Il semble que COM inscription problème sur votre ordinateur. Je ne sais pas quelles sont les versions de votre aide, mais vous pourriez avoir besoin d'enregistrer de type Outlook lib. Merci de poster les versions de tous les acteurs
OriginalL'auteur vlscanner