Outlook 2010 - 运行VBA脚本的规则使“脚本”“不存在或无效”错误

时间:2015-02-17 19:06:39

标签: outlook-vba outlook-2010 rules

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

我需要确保所有收到的电子邮件都是bcc&a 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规则"看"脚本,并允许创建规则。运行时,它会生成如下错误: "剧本""不存在或无效。" 即使经过大量搜索,我也无法找到关于此错误的相关在线帮助。

我希望得到一些指导,如何继续。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

无需使用EntryID值获取项目:

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

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