VBA Outlook Mail .display, запись, когда / если отправлено вручную - PullRequest
2 голосов
/ 28 марта 2010

Мой код отображает сообщение с основной темой, телом, приложением. Далее пользователь вручную обновляет и настраивает сообщение и должен его отправить. Я хочу записать, когда (если) письмо отправлено. Это возможно или какие-либо советы?

Моей средой является Office 2007 с макросом на основе Excel, идущим в Outlook.

[Отрывок]

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

1 Ответ

4 голосов
/ 29 марта 2010

Это вполне возможно при использовании события _Send в классе Outlook.MailItem.

Как я его использую, я создаю класс EMail Watcher, поэтому, когда я создаю электронное письмо и выполняю .Display, я затем создаю новый объект EMailWatcher и говорю ему, чтобы он смотрел это письмо для отправки, а затем сообщал это случается.

Вот класс, которым я пользуюсь. По сути, я также опционально могу установить BoolRange, чтобы, если пользователь отправляет электронное письмо, этот диапазон Excel обновлялся с помощью True. Я также могу сделать так, чтобы класс обновлял диапазон Excel со временем отправки электронного письма.

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

А вот как я это использую:

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

Надеюсь, это поможет ...

...