Clever-Excel-Forum

Normale Version: VBA Klassenmodul: Probleme mit dem Class_Terminate Event
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe ein Klassenmodul geschrieben, der es mir ermöglichst aus dem Excel Workbook heraus ein Outlook MailItem zu erstellen. 
Das Ziel ist es den ItemSend Event des MailItems zu überwachen und beim Senden der erstellten Email ein bestimmtes Makro im Workbook laufen zu lassen.

Es funktioniert soweit auch alles. Nur macht mir das Class_Terminate Event Probleme. Dieser wird nämlich sofort nach dem erstellen der Email ausgelöst!

Also ich habe versucht die einzelnen Funktionen mit MsgBox'es nachzuvollziehen. Momentan läuft es folgender Maßen ab:

- Ich führe mein Code aus und das MailItem wird erstellt und am ausgegeben. (Es wird automatisch vom Excel Workbook auf die erstellte Email gewechselt).
- Nun kann ich in der Email Änderungen vornehmen und danach senden. 
- Wenn ich nach dem erstellen und ausgeben der Email zu keinem anderen Fenster mehr wechsele, also immer im aktiven Email Fenster bleibe bis die Email gesendet und somit automatisch geschlossen ist, funktioniert alles fein. Das ItemSend Event wird erkannt.
- Wenn ich nun aber nach dem erstellen und ausgeben  der Email wieder zurück zu meinem Excel Workbook wechsele wird auf der Stelle das Class_Terminate Event ausgeführt und jeglicher Bezug zur generierten Email geht verloren. Also wird später das ItemSend Event der Email nicht mehr erkannt.

Wie kriege ich es hin, dass ich zwischen der erstellten Email und meinem Workbook wechseln kann ohne dass Class_Terminate ausgeführt wird?

Hier ist mein Code:

i wrote a VBA Class Module to create a Outlook Mailitem from my Excel Workbook and monitor the MailItem_Send Event to run a specific macro in my Workbook after the Mailitem has been send.
I got some problems by understanding the Class_Terminate Event. Maybe someone can help me.
Class Module looks like this:

Code:
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

MfG.
Hatte 
Code:
Dim myMailItem As clsMailItem



im Sub selbst geschrieben. Somit wurde die Klasse am Ende des Subs auch terminiert. 
Lösung: Auf Modulebene schreiben nicht um sub selber.
Gelöst / Solved