Я написал модуль класса VBA для создания почтового элемента Outlook из моей книги Excel и отслеживания события MailItem_Send для запуска макроса в моей рабочей книге после отправки почтового элемента.
Модуль класса выглядит следующим образом:
Option Explicit
Public MailSubject As String
Public MailRecipient As String
Public MailBody As String
Public WithEvents mOutlook As Outlook.Application
Public WithEvents mMailItem As Outlook.MailItem
Private Sub Class_Initialize()
Set mOutlook = New Outlook.Application
MsgBox "mMailItem Class-object has been initialized"
End Sub
Public Sub CreateAndDisplayMailItem()
Set mMailItem = Outlook.CreateItem(olMailItem)
With mMailItem
.To = MailRecipient
.Subject = MailSubject
.Body = MailBody
.Display
End With
End Sub
Private Sub Class_Terminate()
Set mMailItem = Nothing
MsgBox "mMailItem Class-object has ben terminated"
End Sub
Private Sub mOutlook_ItemSend(ByVal Item As Object, Cancel As Boolean)
MsgBox "mOutlook Item Send Event has ben triggered"
'Call MyMacro
End Sub
После того, как я создаю почтовый элемент Outlook из моей книги Excel, используя вышеописанный Class-модуль, окно Outlook Send-A-Mail открывается правильно.
Если я останусь в окне Send-A-Mail (не переходя ни в какое другое окно), пока не будет отправлено письмо;мое событие ItemSend срабатывает правильно.
Проблема заключается в следующем:
- Если я возвращаюсь в свою книгу Excel (поэтому я изменяю окно из моего отображенного элемента MailItem обратнов мою рабочую книгу), объект класса завершается перед отправкой моего MailItem.
Событие Class_Terminate от моего MailItem должно сработать после отправки MailItem!Не раньше, чем.
Класс используется здесь:
Sub Mail_Test()
Dim myMailItem As clsMailItem
Set myMailItem = New clsMailItem
myMailItem.MailSubject = "Test überschrift"
myMailItem.MailBody = "Test Body"
myMailItem.MailRecipient = "xyz@test.de"
myMailItem.CreateAndDisplayMailItem
End Sub