Leggere gli allegati di una mail
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

Completiamo l'esempio del'elenco delle mail da posta in arrivo con la parte necessaria per leggere gli allegati presenti ed eventualmente salvarli nel proprio pc; la abbiamo messa separata qui per rendere più semplice la lettura.
Gli allegati sono un insieme di elementi, una collection del messaggio e volendo ricavare l'elenco degli allegati e riportarlo in una cella usando le variabili dell'esempio dell'elenco della mail, potremmo aggiungere un codice come questo:

If (xOutMail.Attachments.Count > 0) Then
  Allegati = ""
  For Each xOutAll In xOutMail.Attachments
    Allegati = Allegati & xOutAll.Filename & vbNewLine
  Next
  Fa.Cells(Ra, 6) = Allegati
End If

Il "problema" è che così facendo nell'elenco vengono riportati anche quelle immagini che fanno parte del messaggio ma che non sono allegati veri e propri come immagini nella firma, logo, immagini inserite nel messaggio, creando un sacco di confusione.
La cosa strana è che non esiste una proprietà nell'oggetto allegato di VBA che permette di capire se l'allegato è visibile o meno per cui bisgona usare un piccolo "trucco". E' necessario la proprietà PropertyAccessor che permette di accedere alle proprietà dell'oggetto che non sono esposte nel modello a oggetti, il nostro codice diventerà quindi:
'da aggiungere alle definizioni
Dim xOutAll As Outlook.Attachment
Const PrAttachHidden As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"

'Elenco allegati
If (xOutMail.Attachments.Count > 0) Then
  Allegati = ""
  For Each xOutAll In xOutMail.Attachments
    Set PrAcc = xOutAll.PropertyAccessor
    AllVisibile = False
    On Error Resume Next
    If Not PrAcc.GetProperty(PrAttachHidden) Then
      AllVisibile = True
    End If
    On Error GoTo 0

    If (AllVisibile) Then
      'aggiunge solo gli a-capo necessari, per un migliore lettura
      If (Allegati <> "") Then Allegati = Allegati & vbNewLine
      Allegati = Allegati & xOutAll.Filename & vbNewLine
    End If
  Next
  Fa.Cells(Ra, 6) = Allegati
End If

Volendo poi scaricare in una cartella locale, ad esempio la cartella Downloads del nostro pc, dovremmo aggiungere queste righe di codice:
'per la posizione della cartella di Download nel nostro pc
DownloadsPath = Environ("USERPROFILE") & "\Downloads"

' per il download del file
xOutAll.SaveAsFile DownloadsPath & "\" & xOutAll.Filename

Nell'esempio allegato trovate il file dell'esempio dell'elenco della mail completo con la parte che legge l'elenco degli allegati, le righe di codice per scaricarli (gli allegati) le trovate commentate.


L'esempio completo é scaricabile da questo link: Es400.xlsm (a questo link le info per attivare le macro se risultano bloccate)

Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.
Per dubbi o domande potete scriverci a domande@macrofacili.it, sulla nostra pagina FB MacroFacili.it o sul gruppo FB Excel, macro e formule.
 

data4idea srls - PIva 01881000937 - info@data4idea.it