Outlook 2010 - правило, в котором выполняется сценарий VBA, сообщает, что сценарий не существует или является недопустимой ошибкой

Учетная запись Windows 7, Outlook 2010 Exchange. Программист Excel VBA среднего уровня, начинающий программист Outlook VBA.

Мне нужно убедиться, что все входящие электронные письма отправляются в учетную запись 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 "[email protected]"

             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 "[email protected]"

             myItem.DeleteAfterSubmit = True                    
             myItem.Send
             Set myItem = Nothing
         Else
             Debug.Print "Skipping " & TypeName(objItem)
             Set myItem = Nothing
         End If
     Next

 End Sub

Теперь правила Outlook «видят» сценарий и позволяют создать правило. При запуске выдает следующую ошибку: «Скрипт» «не существует или недействителен». Я не смог найти подходящей онлайн-справки по этой ошибке даже после тщательного поиска.

Я был бы признателен за руководство, как действовать дальше. Заранее спасибо.


person parodytx    schedule 17.02.2015    source источник


Ответы (1)


Нет необходимости получать элемент, используя значения EntryID:

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

Вам нужно использовать элемент, переданный в качестве параметра. Значения EntryID больше не передаются в подпрограмму VBA.

person Eugene Astafiev    schedule 17.02.2015
comment
Не могли бы вы показать правильный код? Я просто не могу заставить эту рутину сотрудничать. Я буду у тебя в долгу. - person parodytx; 18.02.2015