检测何时创建新电子邮件(WithEvents)

时间:2016-08-19 10:41:23

标签: vba excel-vba outlook vb6 outlook-vba

我正在尝试从Excel工作簿调用存储在Outlook“'ThisOutlookSession'中的过程。遗憾的是,较新的Outlook 2010应用程序与MS office产品之间的application.run *SubName*不兼容。

由于'.send'上的安全消息需要有人值守站,因此无法完成代表Outlook发送电子邮件的Excel脚本。 (&无法更改公司政策中的安全设置)

目前的工作流程......

- 用户在主题&中发送了一封带有“命令”的电子邮件。附件

-Event侦听器在附件中查找并成功运行Excel例程,并在Outlook中收听以下标题

Private WithEvents Items As Outlook.Items
&
Private Sub Items_ItemAdd(ByVal Item As Object)

- 一旦在Excel中处理,我试图将此数据自动返回给发件人。 (这就是问题所在)

我在Excel中使用后期绑定来创建并准备好回复电子邮件。这是'。''之前的一步。理想情况下,我希望避免使用SendKeys语句,因为如果同时处理其他工作簿,它并不完全可靠。

在Excel中......

Sub test()
Dim aOutlook As Object
Dim aEmail As Object

Set aOutlook = CreateObject("Outlook.Application")
Set aEmail = aOutlook.CreateItem(0)

aEmail.To = "My email address"
aEmail.Subject = "Testing"
aEmail.Body = "Testing"
aEmail.display

End Sub

我一直在无休止地尝试让Outlook识别Excel创建这个包含MSDN页面中列出的事件的新电子邮件。我认为类似下面的代码是识别新mailitem所需要的,但使用Outlook.mailItem下的大多数预设声明都没有成功。

Private WithEvents NewItem As Outlook.mailItem

如果您有解决方案或我想要的其他想法,请告诉我

1 个答案:

答案 0 :(得分:1)

解决了,如果有人在将来需要这个。它绕过安全警告并且不依赖于发送密钥。

Excel准备一封电子邮件并显示它 - 在准备好后,即可开启' On'从Outlook认识到'到'加载mailitem时的地址,然后可以从那里接管:完成.send语句。

注意,需要添加更多参数,例如item.subject中的特定代码,以确保发送正确的电子邮件。

在Excel中:

Sub test()
Dim aOutlook As Object
Dim aEmail As Object

Set aOutlook = CreateObject("Outlook.Application")
Set aEmail = aOutlook.CreateItem(0)

aEmail.To = "abs@123.com"
aEmail.Subject = "Testing"
aEmail.Body = "testing"
aEmail.Display

End Sub

在Outlook中:

Public WithEvents myItem As Outlook.mailItem

Private Sub Application_ItemLoad(ByVal Item As Object)
    If (TypeOf Item Is mailItem) Then
        Set myItem = Item
    End If
End Sub

Private Sub myItem_Open(Cancel As Boolean)

If myItem.To = "abs@123.com" Then
    MsgBox "Detected"
    myItem.Send
End If

End Sub