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规则"看"脚本,并允许创建规则。运行时,它会生成如下错误: "剧本""不存在或无效。" 即使经过大量搜索,我也无法找到关于此错误的相关在线帮助。
我希望得到一些指导,如何继续。 提前谢谢。
答案 0 :(得分:0)
无需使用EntryID值获取项目:
varEntryIDs = Split(EntryIDCollection, ",")
For i = 0 To UBound(varEntryIDs)
Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
您需要使用作为参数传递的项目。 EntryID值不再传递给VBA子。