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子系统