Outlook发送事件类

时间:2016-07-15 21:45:26

标签: excel excel-vba outlook vba


背景:
不久前,我发现了一个类模块来从outlook中获取事件,具体来说,正如标题所示,我用它来捕获发送事件项 - 知道它是否真的被发送 - 。这是Class模块本身。我不记得我曾经如何调用它(我只是保存它以供以后的引用,但是,删除了在我的主子程序中调用它的方法)。

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 个答案:

答案 0 :(得分:1)

从我能够锻炼的这个课程来看,这有点虚伪。正确的用法是Set itmevt.itm = OutApp.CreateItem(0)。问题在于使用Send事件来测试项目是否已发送。请注意事件的Cancel参数。设置Cancel = True会阻止发送电子邮件。这告诉我们,如果在此事件完成之后电子邮件仍未发送。 Sent将始终返回false,并且永远不会导致Send事件发生错误。

另一方面,如果我们在发送电子邮件后进行测试以查看MailItem.Sent,则会引发The item has been moved or deleted.错误。

enter image description here

知道我们可以创建一个函数来发送我们的电子邮件,如果发送电子邮件将返回True,如果不是,则返回False。

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