2014-06-20 4 views
7

Sto provando a utilizzare Outlook VBA per eseguire il ciclo attraverso la posta in arrivo e elencare l'indirizzo di posta elettronica se il soggetto corrisponde a una stringa. Ha ottenuto questo così lontano da googling, ma non funziona:Outlook VBA Come passare da una casella di posta in arrivo e dall'indirizzo di posta elettronica se il soggetto corrisponde

Dim objNS As Outlook.NameSpace 
Set objNS = GetNamespace("MAPI") 
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items 

Dim oFolder As Outlook.MAPIFolder 
Dim oMail As Outlook.MailItem 
For Each oMail In Items 
    Debug.Print oMail.SenderEmailAddress 
Next 

Qualcuno sa il motivo per cui ho un errore di mancata corrispondenza tipo quando ho eseguito questo?

+0

Quale riga restituisce il messaggio atch? A proposito, ricorda che non tutti gli elementi nella posta in arrivo sono di tipo 'MailItem'. In tal caso, ciò provocherà un errore di disallineamento in 'For Each Loop'. – L42

risposta

12

Come ha commentato, provare che incorpora un banco di prova per MailItem nel codice:

Dim objNS As Outlook.NameSpace: Set objNS = GetNamespace("MAPI") 
Dim olFolder As Outlook.MAPIFolder 
Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
Dim Item As Object 

For Each Item In olFolder.Items 
    If TypeOf Item Is Outlook.MailItem Then 
     Dim oMail As Outlook.MailItem: Set oMail = Item 
     Debug.Print oMail.SenderEmailAddress 
    End If 
Next 

Edit1: Come suggerito da Dmitry, è anche possibile utilizzare:

If Item.Class = 43 Then 

al posto di

If TypeOf Item Is Outlook.MailItem Then