2016-07-15 6 views
2


Hintergrund:
Vor einiger Zeit entdeckte ich ein Klassenmodul auf Ereignisse aus Outlook zu erhalten, und zwar, wie der Titel vorschlagen, ich verwende es den Send-Ereignis zu fangen -zu zu wissen wenn es wirklich gesendet wurde oder nicht-. Dies ist das Klassenmodul selbst. Ich kann mich nicht erinnern, wie ich es nannte (ich habe es nur für spätere Referenzen gespeichert, aber, löschte den Weg, es in meinem Haupt-Sub zu nennen).Outlook senden Ereignisklasse

Option Explicit 
Public WithEvents itm As Outlook.MailItem 
Private Sub itm_Send(Cancel As Boolean) 
    Dim blnSent As Boolean 
    On Error Resume Next 
    blnSent = itm.Sent 
    If Err.Number = 0 Then 
     Debug.Print "Email not sent" 
    Else 
    Debug.Print "Email sent") 
    End If 
End Sub 

Problem:
Ich habe vergessen, wie soll ich es in meinem Unter nennen, die die E-Mail schickt. Ich habe folgende Erklärungen oben versucht:

Dim itmevt As New CMailItemEvents 
Public EmailToSend As Outlook.MailItem 

Da ist in meinem Unter das ist das Senden der E-Mail:

Set itmevt.itm = EmailToSend 

Allerdings habe ich nicht das Ereignis des Sendens ausgelöst in der Klasse bekommen.

Spezifische Fragen:
1. Wie rufe ich die Klasse richtig?
2. Wie kann ich den Wert gesendet/nicht geschickt gesendet werden (Ich möchte es in eine Zelle für die spätere Analyse schreiben-gesendet/nicht gesendet-) Ich dachte Parsing zu einer öffentlichen Funktion, die die zurück erhalten könnte Wert für das Sub, das es anruft, aber, ich glaube nicht, dass das der beste Ansatz ist

Antwort

1

Von was ich in der Lage war zu trainieren diese Klasse ist etwas falsch. Die richtige Verwendung wäre Set itmevt.itm = OutApp.CreateItem(0). Das Problem besteht darin, das Sendeereignis zu verwenden, um zu testen, ob der Artikel gesendet wurde oder nicht. Beachten Sie, dass der Parameter Abbrechen des Ereignisses. Die Einstellung Cancel = True verhindert, dass die E-Mail gesendet wird. Das sagt uns, dass wenn die E-Mail nicht gesendet wird, bis dieses Ereignis abgeschlossen ist. Gesendet wird immer false zurückgeben und wird nie einen Fehler von dem Senden-Ereignis verursachen.

Auf der anderen Seite, wenn wir testen, MailItem.Sent zu sehen, nachdem wir die E-Mail senden, wird es einen The item has been moved or deleted. Fehler werfen.

enter image description here

Zu wissen, dass wir eine Funktion erstellen können, die unsere E-Mails senden, die wahr ist, wenn die E-Mail und Falsch gesendet zurück, wenn es nicht ist.

Function SendEmail(addressTo As String, addressCC As String, Subject As String, HTMLBody As String) As Boolean 
    Dim OutApp As Object 
    Set OutApp = CreateObject("Outlook.Application") 

    With OutApp.CreateItem(0) 
     .To = addressTo 
     .CC = addressCC 
     'OutMail.BCC = "" 
     .Subject = Subject 
     .HTMLBody = HTMLBody 
     .Send 
     On Error Resume Next 

     Call .Sent 

     SendEmail = Err.Number <> 0 

     If Err.Number = 0 Then 
      Debug.Print "Email not sent" 
     Else 
      Debug.Print "Email sent" 
     End If 

     On Error GoTo 0 

    End With 



    Set OutApp = Nothing 

End Function 
+0

Scheint eine gute Idee, ich werde es testen und Feedback geben, wenn es funktioniert – Sgdva

+0

Es hat funktioniert! Ich denke jedoch, ich sollte eine neue Frage aufwerfen, weil ich etwas nicht verstanden habe, als ich damit gearbeitet habe. – Sgdva

+0

Ich könnte Ihnen eine schnelle Antwort geben. –