excel - Outlook 发送事件类

标签 excel 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.如何有效地获取发送/未发送的值(我想将其写在一个单元格中以供以后分析-发送/未发送-)我想解析为一个公共(public)函数,可以将值取回调用它的子,但是,我认为这不是最好的方法

最佳答案

从我能够锻炼的内容来看,这门课有点假。正确的用法是 Set itmevt.itm = OutApp.CreateItem(0) .问题在于使用 Send 事件来测试该项目是否已发送。请注意,事件的 Cancel 参数。设置Cancel = True防止电子邮件被发送。这告诉我们,如果直到此事件完成后才发送电子邮件。 Send 将始终返回 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

关于excel - Outlook 发送事件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405423/

相关文章:

python - 使用 python 提取 Outlook 电子邮件正文和收件人电子邮件地址

javascript - 使用 javascript 或 jquery 即时创建 .ics 文件?

vba - 需要帮助以在 VBA 中使用 post 方法发布多部分表单数据

excel - 使用引用 Excel VBA 将单行转换为单列

excel - Visual Studio 在线 : No Reports on Team Server possible?

excel - windows定时器VBA改变速度

azure - 如何使用 Azure 数据工厂复制事件提取电子邮件附件?

excel - 使用排列对随机向量进行排序

vba - 对没有唯一 ID 的名字和姓氏进行 VLOOKUP

python - 将Excel定位转换为数字