2017-02-14 4 views
1

Je tente d'extraire l'adresse e-mail de l'expéditeur de tous les e-mails d'un dossier de boîte de réception. Je n'ai aucun problème jusqu'à ce que j'atteigne ma commande For pour chaque email dans le dossier. Si j'utilise le code tel qu'il est maintenant, je rencontre une erreur car olSender n'est pas Dim comme Variante, mais si je le change en Variant je ne peux pas le Dim comme Outlook.MailItem pour récupérer l'adresse de senderemail. Je suppose qu'une boucle For imbriquée est la solution, je continue à peine à trouver la réponse. Outlook 2013 est la version.Comment récupérer SenderEmailAddress de chaque élément de courrier dans un dossier Outlook?

Sub ExportToExcel() 
'EXCEL 
'Opening Excel workbook 

Dim oXLApp As Object, oXLwb As Object, oXLws As Object 
Dim lRow As Long 

On Error Resume Next 
    Set oXLApp = GetObject(, "Excel.Application") 

    '~~> If not found then create new instance 
    If Err.Number <> 0 Then 
     Set oXLApp = CreateObject("Excel.Application") 
    End If 
    Err.Clear 
    On Error GoTo 0 

oXLApp.Visible = True 

Set oXLwb = oXLApp.Workbooks.Open("C:\Users\******\Documents\******.xlsm") 
Set oXLws = oXLwb.Sheets("Sheet1") 


oXLws.Range("A" & 1).Select 
'OUTLOOK 

'Opening Outlook folder 

Dim olNS As Outlook.NameSpace 
    Dim objOwner As Outlook.Recipient 

    Set olNS = Application.GetNamespace("MAPI") 
    Set objOwner = olNS.CreateRecipient("*********@email.com") 
    objOwner.Resolve 

If objOwner.Resolved Then 

Set BouncedEmailsFolder = olNS.GetSharedDefaultFolder(objOwner, olFolderInbox).Folders("Bounced Emails") 


End If 

Dim olItms As Outlook.Items 
Dim olMail As Variant 
Dim i As Long 
Dim olSender As Outlook.MailItem 




Set olItms = BouncedEmailsFolder.Items 

olItms.Sort ("Subject") 


i = 1 

For Each olSender In olItms 

    oXLws.Select 
    oXLws.Cells(i, 1).Select 
    oXLws.Cells(i, 1).Value = olSender.SenderEmailAddress 
    i = i + 1 
Next olSender 





Set BouncedEmailsFolder = Nothing 
Set olNS = Nothing 




End Sub 
+0

Try 'Si Item.Class = olMail Then' après pour chaque – 0m3r

Répondre

1

Votre code fonctionne pour moi lorsqu'il est défini dans ma boîte de réception par défaut. olNS.GetDefaultFolder(olFolderInbox)

Je me demande si vous ne rencontrez pas d'éléments non-courrier dans vos e-mails rebondis? Vous pouvez essayer le code ci-dessous, qui permet de récupérer des articles de courrier seulement (au lieu de aussi essayer d'extraire l'expéditeur pour les demandes de réunion, la répartition des tâches, etc.):

For Each olSender In olItms 
     If TypeOf olSender Is MailItem Then 
      oXLws.Select 
      oXLws.Cells(i, 1).Select 
      oXLws.Cells(i, 1).Value = olSender.SenderEmailAddress 
      i = i + 1 
     End If 
    Next olSender 
+0

Merci d'avoir répondu à Ryan. J'ai essayé votre code, mais je suis toujours confronté à un problème une fois que le code atteint Next olSender. Quand je dim olSender en tant que Variante, je n'ai plus de problème avec Next olSender, mais j'ai un problème parce que j'ai varié en Variant, il ne peut pas être grisé comme Outlook.MailItem. – Jroscoe26

+0

@ Jroscoe26 Quelle erreur recevez-vous? – RyanL

+0

Je l'ai juste essayé sur ma propre boîte de réception de dossier par défaut et cela a fonctionné. Merci de votre aide. – Jroscoe26