2010-03-28 9 views
2

Mon code affiche un message avec le sujet de base, le corps, la pièce jointe. Ensuite, l'utilisateur met à jour et personnalise manuellement le message et doit l'envoyer. Je veux enregistrer quand (si) l'email est envoyé. Est-ce possible ou des conseils?VBA Outlook Mail .display, enregistrement quand/si envoyé manuellement

Mon environnement est Office 2007 avec une macro Excel basée sur Outlook.

[Extrait]

Dim OutApp As Outlook.Application 
Dim OutMail As Outlook.MailItem 

Set OutApp = CreateObject("Outlook.Application") 
OutApp.Session.Logon 

Set OutMail = OutApp.CreateItem(olMailItem) 
With OutMail 
    .To = Email     '.CC = 
    .Subject = Subj 
    .BodyFormat = olFormatHTML 
    .Body = Msg     '.HTMLBody = Msg 
    If Not FileAttach = vbNullString Then .Attachments.Add (FileAttach) 
    .Display 
End With 

Répondre

4

Ceci est tout à fait possible, en utilisant l'événement _Envoyer dans la classe Outlook.MailItem. De la manière dont je l'utilise, je crée une classe appelée EMAIL Watcher, donc quand je crée l'email et que je fais l'affichage, je crée un nouvel objet EMailWatcher et je lui dis de regarder cet email pour envoyer, puis de rendre compte quand ça arrive.

Voici la classe que je l'utilise. Fondamentalement, je peux aussi éventuellement définir le BoolRange de sorte que si l'utilisateur envoie l'e-mail, cette plage Excel est mis à jour avec True. Je peux également mettre à jour la classe d'une plage Excel avec l'heure à laquelle l'email est envoyé.

Public BoolRange As Range 
Public DateRange As Range 
Public WithEvents TheMail As Outlook.MailItem 


Private Sub TheMail_Send(Cancel As Boolean) 
    If Not BoolRange Is Nothing Then 
     BoolRange.Value = True 
    End If 
    If Not DateRange Is Nothing Then 
     DateRange.Value = Now() 
    End If 
End Sub 

Et voici comment je l'utilise:

With oMail 
    .To = addr 
    .Subject = "CCAT eVSM Utilities License Code" 
    .Body = "Message body" 
    .Display 
End With 
Set CurrWatcher = New EmailWatcher 
Set CurrWatcher.BoolRange = Range("G12") 
Set CurrWatcher.TheMail = oMail 

Espérons qui aide ...

+0

Est-il possible de le faire avec la MAPI pour VB.NET? – Zolomon

Questions connexes