2016-08-19 67 views
1

我想从Excel工作簿中调用存储在Outlook“ThisOutlookSession”中的过程。不幸的是,较新的Outlook 2010应用程序与MS Office产品之间的application.run *SubName*不兼容。检测何时创建了新电子邮件(WithEvents)

由于需要有人工作站的'.send'上的安全信息,不能完成代表Outlook发送电子邮件的Excel脚本。 (&无法改变从公司策略的安全设置)

当前的工作流程...

- 用户给我发电子邮件与“命令”的主题&附件

- 活动监听器发现并成功运行在与下面的头附件的Excel程序听在Outlook

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

- 一旦在Excel中进行处理,我试图让这个数据自动返回到仙DER。 (这是问题所在)

我在Excel中使用后期绑定来创建并准备好返回电子邮件。这是'.send'之前的一步。理想情况下,我希望避免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

如果downvoted,请告诉我为什么,所以我可以提高我的问题 – Xiphos

回答

1

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

Excel准备一封电子邮件并显示它 - 当准备好时,Outlook中的“开启事件”会在加载邮件时识别“到”地址,然后可以从那里接管:使用.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 = "[email protected]" 
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 = "[email protected]" Then 
    MsgBox "Detected" 
    myItem.Send 
End If 

End Sub