2014-02-20 6 views
0

Я хочу удалить почту, когда поступит ответ. Это фрагмент моего кода. Я не понимаю, почему для каждого пробегов в ошибка 13Ошибка 13 in для каждого vba outlook

Sub test222() 

Dim oapp As Outlook.Application 
Dim osession As Outlook.NameSpace 
Dim oInbox As Outlook.MAPIFolder 
Dim oSentItem As Outlook.MAPIFolder 

Dim omail As Outlook.MailItem 
Dim conID As String 

Set oapp = New Outlook.Application 
Set osession = oapp.GetNamespace("MAPI") 
Set oInbox = osession.GetDefaultFolder(olFolderInbox) 
Set oSentItem = osession.GetDefaultFolder(olFolderSentMail) 

i = 1 
For Each omail In oSentItem.Items 

If (omail.Subject = "Delivered: aa") Then 
    Msgbox "Hi" 
    omail.Delete 

    Exit For 
       Else 
    i = i + 1 
    End If   
Next 

End Sub 

ответ

1

Объявить omail в Object и проверить TypeName в петле. То, как вы это сделали, будет ошибка несоответствия типа, когда цикл работает во что-то еще, кроме сообщения электронной почты, например. пункт назначения.

Также читайте о позднем связывании. Я бы посоветовал использовать эту функциональность, когда вы работаете с библиотеками, отличными от по умолчанию.

+0

Протестировано, но столкнулся с некоторыми другими проблемами. Это не работает с квитанциями о доставке, работает только один раз: когда я тестирую его с некоторыми предметами, я получаю msgbox, но почта не удаляется. Когда я снова запускаю макрос, ничего не происходит. ** Однако основная проблема заключается в том, что она не работает с доставкой recipts. ** – ZZA

+0

Я не могу воспроизвести проблему, с которой вы столкнулись, но я предлагаю проверить тип доставки квитанции. Это MailItem? – Kapol

+0

Предполагается, что это будет ReportItem. Я пробовал этот код [link] http://stackoverflow.com/questions/78924/when-is-a-mailitem-not-a-mailitem, но был изменен с помощью: 'If TypeName (msg) = ReportItem Then MsgBox" 2 «' в цикле for, но он ничего не делает. – ZZA

Смежные вопросы