Newsgroup: it.comp.lang.visual-basic
Titolo: Export mail outlook in Excel

Ciao,
come da oggetto, ho la necessità di esportare le mail di una cartella di Outlook in Excel.
il seguente codice apre Excel ed inserisce le mail e tutto funziona bene ma dovrei modificarlo per ottenere di più:
 
- Filtrare in modo che esporti solo le mail da leggere ed esportare solo quelle
- Filtrare parte dell'oggetto mail (es.: "Esito non conforme" senza ciò che viene dopo). Questa parte è opzionale perchè se esporto già quelle non lette potrebbe non servire in quanto le non lette sono già quelle che voglio però può essere utile
- Questa la ciliegina sulla torta: prendere dal corpo mail solo alcune righe e posizionarle ognuna in una colonna Excel
 
questo il codice che ho messo in Outlook 
 
grazie
Marco
 
 
Sub Export_KO()
 
    ufAttendi.Show vbModeless
 
    Dim xlApp As Excel.Application
    Dim xlWb As Excel.Workbook
 
    Dim i As Long 'Ricerca righe
    Dim arrHeader As Variant
 
    Dim olNS As NameSpace
    Dim olInboxFolfer As MAPIFolder
    Dim olItems As Items
    Dim olMailItem As MailItem
 
    arrHeader = Array("Data", "Oggetto", "Non letto")
 
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    Set xlWb = xlApp.Workbooks.Add
 
    Set olNS = GetNamespace("MAPI")
    Set olInboxFolfer = olNS.GetDefaultFolder(olFolderInbox).Folders("Notifiche")
    Set olItems = olInboxFolfer.Items
 
    i = 2
 
    On Error Resume Next
 
    xlWb.Worksheets(1).Range("A1").Resize(1, UBound(arrHeader) + 1).Value = arrHeader
 
    For Each olMailItem In olItems
 
        xlWb.Worksheets(1).Cells(i, "A").Value = olItems(i).CreationTime
        xlWb.Worksheets(1).Cells(i, "B").Value = olItems(i).SenderName
        xlWb.Worksheets(1).Cells(i, "C").Value = olItems(i).Subject
        xlWb.Worksheets(1).Cells(i, "D").Value = olItems(i).UnRead
 
    i = i + 1
 
    Next olMailItem
 
    xlWb.Worksheets(1).Cells.EntireColumn.AutoFit
 
 
     MsgBox ("Fatto!")
 
 
    Set xlWb = Nothing
    Set xlApp = Nothing
 
    Set olItems = Nothing
    Set olInboxFolfer = Nothing
    Set olNS = Nothing
 
Unload ufAttendi
 
End Sub

 xlWb.Worksheets(1).Cells(i, "D").Value = olItems(i).UnRead
 
 
unread significa "non lette", quindi eviterei gli altri selettori e
partirei da qui....


Ciao,
UnRead significa non lette ok, ma non voglio mettere lo stato di mail letta o non letta in Excel, vorrei che prendesse solo le mail non lette ed esportasse solo quelle. 
 
Ho messo xlWb.Worksheets(1).Cells(i, "D").Value = olItems(i).UnRead solo per poter filtrare in Excel le non lette visto che ora non ho altro modo. 
 
Al momento mi esporta circa 30.000 mail che non mi servono, quelle da leggere sono 20 o 30 quindi sarebbe più rapido se filtrasse prima di metterle in Excel

 solo quelle. 
 
sempre a braccio....
 
if olItems(i).UnRead = true then


ho provato ad inserire il comando If ma non fa più nulla!
l'ho messo sia prima che dopo la parte For Each ma non cambia niente!
 
Marco
 


credo di aver risolto partendo da if olItems(i).UnRead = true then come consigliato...
l'unica cosa che non mi metteva l'intestazione ma la faccio creare dopo l'estrazione inserendo una riga in A1
 
sFilter = "[UnRead] = true" '<<<<<<<<<<<<
 
 
    Set olNS = GetNamespace("MAPI")
    'Set olInboxFolfer = olNS.GetDefaultFolder(olFolderInbox).Folders("Notifiche QDA")
    Set olInboxFolfer = olNS.GetDefaultFolder(olFolderInbox).Folders("Buste paga CUD e fatture")
    'Set olItems = olInboxFolfer.Items
    Set olItems = olInboxFolfer.Items.Restrict(sFilter) '<<<<<<<
 
   i = 1
 
    On Error Resume Next
 
    For Each olMailItem In olItems
 
        xlWb.Worksheets(1).Cells(i, "A").Value = olItems(i).ReceivedTime
        xlWb.Worksheets(1).Cells(i, "B").Value = olItems(i).SenderName
        xlWb.Worksheets(1).Cells(i, "C").Value = olItems(i).Subject
        xlWb.Worksheets(1).Cells(i, "D").Value = olItems(i).UnRead
 
    i = i + 1
 
    Next olMailItem
 
    xlWb.Worksheets(1).Range("A1").Select
    xlWb.Worksheets(1).Range("A1").EntireRow.Insert
