的背景:
不久前,我发现了一个类模块来从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.如何获得有效发送/未发送的值(我想将其写入单元格以供以后分析 - 发送/未发送 - )我想解析为公共函数,可能会得到将值返回给调用它的子,但是,我不认为这是最好的方法
答案 0 :(得分:1)
从我能够锻炼的这个课程来看,这有点虚伪。正确的用法是Set itmevt.itm = OutApp.CreateItem(0)
。问题在于使用Send事件来测试项目是否已发送。请注意事件的Cancel参数。设置Cancel = True
会阻止发送电子邮件。这告诉我们,如果在此事件完成之后电子邮件仍未发送。 Sent将始终返回false,并且永远不会导致Send事件发生错误。
另一方面,如果我们在发送电子邮件后进行测试以查看MailItem.Sent,则会引发The item has been moved or deleted.
错误。
知道我们可以创建一个函数来发送我们的电子邮件,如果发送电子邮件将返回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