Outlook 2010 - 运行 VBA 脚本的规则出现错误"Script " " doesn't exist or is invalid"



Windows 7,Outlook 2010 Exchange帐户。中级Excel VBA程序员,新手Outlook VBA程序员。

我需要确保所有收到的电子邮件都以bcc方式发送到gmail帐户。我修改了一个在线宏以适应。它可以完美地处理所有收到的电子邮件,除了那些在第一次启动和Outlook启动时下载的电子邮件。它驻留在ThisOutlookSession中。

 Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
     Dim varEntryIDs
     Dim objItem
     Dim myItem As MailItem
     Dim i As Integer
     varEntryIDs = Split(EntryIDCollection, ",")
     For i = 0 To UBound(varEntryIDs)
         Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
         If TypeOf objItem Is MailItem Then                     
             Set myItem = objItem.Forward
             myItem.Recipients.Add "bcc.hwb@gmail.com"
             myItem.DeleteAfterSubmit = True                    
             myItem.Send
             Set myItem = Nothing
         Else
             Debug.Print "Skipping " & TypeName(objItem)
             Set myItem = Nothing
         End If
     Next
 End Sub

论坛上的一个问题善意地告诉我,Outlook启动和文件夹更新时排队的邮件不会触发NewMail和NewMailEx事件例程。他们建议设置一个规则,为所有收到的邮件运行一个脚本。

我试图调用例程,但脚本不"可见"。我搜索了一段时间,发现只有作为MailItems操作的脚本才能被识别,而且它们必须在模块中。我修改了脚本以通过此测试,现在它是可见的。

 Sub IncomingBCC(myItem As MailItem)
     Dim EntryIDCollection As String
     Dim varEntryIDs
     Dim objItem
   ' Dim myItem As MailItem
     Dim i As Integer
     varEntryIDs = Split(EntryIDCollection, ",")
     For i = 0 To UBound(varEntryIDs)
         Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
         If TypeOf objItem Is MailItem Then                     
             Set myItem = objItem.Forward
             myItem.Recipients.Add "bcc.hwb@gmail.com"
             myItem.DeleteAfterSubmit = True                    
             myItem.Send
             Set myItem = Nothing
         Else
             Debug.Print "Skipping " & TypeName(objItem)
             Set myItem = Nothing
         End If
     Next
 End Sub

现在,Outlook规则"查看"脚本,并允许创建规则。运行时,它会生成如下错误:脚本"不存在或无效即使经过大量搜索,我也找不到关于这个错误的相关在线帮助。

我希望能就如何进行提供一些指导。提前谢谢。

无需使用EntryID值获取项目:

 varEntryIDs = Split(EntryIDCollection, ",")
 For i = 0 To UBound(varEntryIDs)
     Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))

您需要使用作为参数传递的项。EntryID值不再传递给VBA子系统

最新更新