2016-07-15 81 views
2


背景:
前一段時間,我發現了一類模塊,以獲得從Outlook事件,具體而言,如標題暗示,我用它來捕捉髮送事件項目-to知道如果它真的被髮送或沒有 - 。這是Class模塊本身。我不記得我以前怎麼稱呼它(我只是將它保存爲以後的參考,但刪除了在我的主要子目錄中調用它的方式)。Outlook發送事件類

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 

問題:
我忘了,我應該怎麼稱呼它在我的子多數民衆贊成發送電子郵件。我曾嘗試以下聲明在頂部:

Dim itmevt As New CMailItemEvents 
Public EmailToSend As Outlook.MailItem 

然後在我的子多數民衆贊成發送電子郵件:

Set itmevt.itm = EmailToSend 

但是,我不能在課堂上發觸發事件。

具體問題:
1.如何正確調用該類?
2.我如何獲得發送/未發送的值(我想將它寫入單元格中供以後分析 - 發送/未發送)我想到解析爲公共函數,可以返回值,但它,我不認爲這是最好的方法

回答

1

從我能鍛鍊這個類是有點虛假。正確的用法是Set itmevt.itm = OutApp.CreateItem(0)。問題在於使用發送事件來測試項目是否被髮送。注意事件的Cancel參數。設置Cancel = True可防止發送電子郵件。這告訴我們,如果電子郵件沒有發送到此事件完成後。發送將始終返回false,並且不會從發送事件中導致錯誤。

另一方面,如果我們在發送郵件後測試MailItem.Sent,它會拋出一個The item has been moved or deleted.錯誤。

enter image description here

知道我們可以創建將發送我們的電子郵件,如果電子郵件的發送和假,如果不是,將返回True的函數。

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

似乎是一個好主意,我會測試它,並會反饋它是否工作 – Sgdva

+0

它的工作!但是,我認爲我應該開一個新的問題,因爲我在處理問題時不瞭解某些內容。 – Sgdva

+0

我可能會給你一個快速的答案。 – 2016-07-18 16:49:40