2016-11-24 69 views
0

我在Excel上制作了一个小宏,目的是通过特定的主题和特定的接收时间在outlook上查找邮件。几乎每个人都能很好地工作,但是我的同事之一的oulook收件箱出现了错误。VBA Excel - Outlook - For Each - Returns mail = Nothing - Error mngt

代码中,我写道:

For Each olMail In oDefaultFolder.Items 
    If olMail.Subject = "DDJ of " & date_target Then 
     MyAr = Split(olMail.Body, vbCrLf) 

     For i = LBound(MyAr) To UBound(MyAr) 
     Sheets("DDJ").Cells(i + 1, 1).Value = MyAr(i) 
     Next i 
     ddj_empty = False 
     Exit For 
    End If 
Next olMail 

我试着用3个Outlook帐户,并且没有PB但与第四帐户它的错误..我删除手动之一,但有太多,从预约到CONF这似乎是正常的邮件

它返回的pb是它突出显示“下一个oMail”,并说oLMail = Nothing 我想我的宏继续进行搜索,我有一些麻烦来处理这个没有错误。

我一直在寻找类似于“if mail = nothing then = i + 1 .. next i”的smtg,但我在google上发现了一个“continue”,但我的excel无法识别continue函数?所以我不知道该怎么办

有什么建议吗? 非常感谢

回答

0

Outlook文件夹可以包含different item types。不同的类型不一样。例如,MeetingItem支持MeetingWorkspace propertyMailItems不。

在使用olMail之前,最好使用vba TypeName函数检查类型。

' Perform action on specific item types only. 
' TESTED: Outlook 2010. 
Sub CheckItemType() 
    Dim i As Object   ' Used to loop over items. 
    Dim iType As String  ' Used to hold type of above item. 

     ' Loop over all items in the inbox. 
     For Each i In Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items 
      iType = TypeName(i) 

      ' Limit actions to required types. 
      If iType = "MailItem" Or iType = "MeetingItem" Then 
       ' Your logic. 
      End If 
     Next 
End Sub 
+0

SORRY!我使用Outlook编写了代码。刚注意到你的例子来自Excel。 TypeName和If语句是您需要的唯一位。只需将这些添加到您现有的代码。 –

+0

谢谢,我会尝试,我会告诉你,如果它修复了PB! – ploom

+0

谢谢它的窍门! – ploom