Outlook Vba ricezione email



  • Outlook Vba ricezione email
    di Davide2574 data: 01/09/2015 12:31:38

    Salve,


    Vorrei sapere come si potrebbe fare i codici di vba di cui avrei bisogno che gli email ricevuti in Outlook che si trasferisce in Excel, data ora e contenuto del messaggio di email.
    Ne ricevo circa più di 10 email e cosi potrò utilizzare anche per i calcoli con le formule che dovrei inserire.
    Ho provato a cercare in Google ma non sono riuscito a trovare e forse avrò sbagliato a scrivere qualche parole.
    Grazie.
    Ciao e buona giornata

    Davide



  • di totygno71 data: 01/09/2015 18:29:42

    Google transalte??? No Alpitour????
    Aiaiaiaiaiiiiii ^_^



  • di davide2574 (utente non iscritto) data: 01/09/2015 19:37:04

    Bella battuta!!!!



  • di alfrimpa data: 01/09/2015 19:46:23

    Totygno voleva solo dire che dalla tua spiegazione non si capisce cosa vuoi fare.

    Se vuoi avere speranze di ricevere qualche risposta devi riformulare il quesito in maniera più chiara.

    Alfredo





  • di totygno71 data: 01/09/2015 20:04:13

    Non voleva essere una battuta, sembrano proprio frasi tradotte con un traduttore automatico, può succedere infatti che l'utente non italiano utilizzi questo metodo per tradurre il suo quesito con risultati discutibili come è ovvio che sia.
    Cmq mi fa piacere che non sia così ma resta il fatto che io personalmente non ho capito NULLA riguardo il tuo problema ma non disperare sicuramente qualcun altro sarà più perspicace di me.
    Toty



  • di Davide2574 data: 01/09/2015 20:53:33

    Chiedo scusa a voi.
    Io sono italianissimo solo che sono un sordo e ne sono consapevole che ho un pessimo sull'italiano.
    Allora mi interessava che outlook quando riceve gli email e vengono reinviati o spostati nel file di excel.
    spero di essermi spiegato abbastanza chiaro.
    E scusami ancora per il mio pessimo italiano.



  • di Davide2574 data: 01/09/2015 23:35:13

    quindi è impossibile fare?



  • di Luca73 data: 02/09/2015 08:14:53

    Ciao
    Secondo me non è impossibile
    bisogna chiaramente capire cosa vuoi
    Cosa intendi per spostare nel file excel?
    Ti interessa solo un file excel con i dati principali (data ora e contenuto del messaggio di email) delle mail inviate e spedite?
    Il principale problema se vuoi farlo in automatico devi scriverlo in VBA di Outlook
    altrimenti una soluzione sarebbe una o più volte al giorno far girare una macro in excel che legge tutte le mail in una directory e poi ti estragga i dati che ti servono.
    Ciao
    Luca





  • di Davide2574 data: 02/09/2015 08:26:02

    Ciao Luca

    No no, mi interessa solo quelle ricevute e non inviate e spedite.
    Ho guardato nel sito di uno che aveva scritto in inglese e ho provato a copiare ed incollare ma non ci sono riuscito a far funzionare. Perché nel vba sono a 0 per questo vorrei capire il meccanismo.
    Grazie.
    Ciao

    Davde



  • di Luca73 data: 02/09/2015 09:04:17

    Quali informazioni vuoi trasferire su file excel?
    Per esempio
    Oggetto mail
    data e ora ricezione
    che invia

    Per il testo della mail è un problema se inviata in HTML in quanto assieme al testo ti copierebbe tutto le informazioni di formattazione. Per favore mandami il sito da cui avevi letto. aggiungi spazi così H t t p:\.... altrimenti non viene pubblicato



    Ciao





  • di totygno71 data: 02/09/2015 09:10:37

    CIT"Chiedo scusa a voi.
    Io sono italianissimo solo che sono un sordo e ne sono consapevole che ho un pessimo sull'italiano.

    Non devi chiedere scusa a nessuno, non è successo nulla!



  • di Davide2574 data: 02/09/2015 09:15:47

    ecco il sito

    h t t p : //stackoverflow.com/questions/11876549/how-to-copy-outlook-mail-message-into-excel-using-vba-or-macros

    ho già provato a seguire passo per passo ma non mi esce proprio i dati. poi in fondo giù dice altri codici e ho provato ad utilizzare questo ma mi chiede "Le macro del progetto sono disattivate" eppure sono tutti e due a MEDIO intendo nello sviluppo di Outlook ed Excel

    ho notato che una piccola parte è formato in html.
    se vuole potrei far girare un email di un esempio.

    grazie per la tua disponibilità.



  • di Luca73 data: 02/09/2015 13:28:14

    Ciao
    Ho provato leggendo qua e la e adattando
    a buttare giù un paio di righe di codice.

    Devi inserirlo in outlook
    pertanto
    apri outlook vai in Sviluppo poi clicca Visual basic
    si apre una shermata con i progetti VBA
    vai su Microsoft Outlook Oggetti
    quindi su ThisOutlookSessio
    e incolla quanto qui sotto riportato

    Quando uscirai devi dirgli di salvare il progetto

    Crea un file excel da qualche parte con un foglio che si chiama MailRic

    Quindi inserisci il nome completo del percorso nome file nella riga
    MioFile = "C:UsersXXXXXXX0-XXXXXXXXXXXXX ProgrammiListaMail.xlsx"

    Quindi quando ti arriva una mail apre excel ne compila alcune righe salva e chiude.
    Fammi sapere
    Ciao
    Luca

     
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
        Dim MioFile As String
        Dim varEntryIDs
        Dim objItem As Object
        Dim i As Integer
        ' modificare il percorso e il nome file
        MioFile = "C:UsersXXXXXXX0-XXXXXXXXXXXXX ProgrammiListaMail.xlsx"
        varEntryIDs = Split(EntryIDCollection, ",")
        Dim oXLApp As Object, oXLwb As Object, oXLws As Object
        Dim lRow As Long
     '~~> Establish an EXCEL application object
        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
        '~~> Open the relevant file
        Set oXLwb = oXLApp.Workbooks.Open(MioFile)
        Set oXLws = oXLwb.Sheets("MailRic")
        lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(-4162).Row + 1
        oXLApp.Visible = True
        For i = 0 To UBound(varEntryIDs)
            Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
            With oXLws
                .Range("A" & lRow).Value = objItem.Subject 'in colonna A mette l'oggetto
                .Range("B" & lRow).Value = objItem.SenderName 'in colonna B mette che ha inviato
                .Range("C" & lRow).Value = objItem.CC 'in colonna C mette i destinatari in CC
                .Range("C" & lRow).Value = objItem.To 'in colonna C mette i destinatari in TO
                .Range("E" & lRow).Value = objItem.Body ' in colonna E mette il testo
                .Range("F" & lRow).Value = objItem.ReceivedTime ' in colonna F mette data e ora di ricezione
                '.Range("C" & lRow).Value = objItem.BodyFormat
                '.Range("E" & lRow).Value = objItem.HTMLBody
                '.Range("F" & lRow).Value = objItem.RTFBody
        End With
        Next
        oXLwb.Save
        oXLwb.Close
    End Sub
    






  • di Davide2574 data: 02/09/2015 14:58:01

    grazie Luca, ho provato a quello che mi hai indicato tutto e non mi funziona. cioè non si apre da solo e ho aperto manualmente e niente email in file excel.
    forse avrò sbagliato a scrivere qualcosa?
     
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
        Dim MioFile As String
        Dim varEntryIDs
        Dim objItem As Object
        Dim i As Integer
        ' modificare il percorso e il nome file
        MioFile = "C:xxxxxxxxxxDesktopMailMonkey.xlsx"
        varEntryIDs = Split(EntryIDCollection, ",")
        Dim oXLApp As Object, oXLwb As Object, oXLws As Object
        Dim lRow As Long
     '~~> Establish an EXCEL application object
        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
        '~~> Open the relevant file
        Set oXLwb = oXLApp.Workbooks.Open(MioFile)
        Set oXLws = oXLwb.Sheets("MailRic")
        lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(-4162).Row + 1
        oXLApp.Visible = True
        For i = 0 To UBound(varEntryIDs)
            Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
            With oXLws
                .Range("A" & lRow).Value = objItem.Subject 'in colonna A mette l'oggetto
                .Range("B" & lRow).Value = objItem.SenderName 'in colonna B mette che ha inviato
                .Range("C" & lRow).Value = objItem.CC 'in colonna C mette i destinatari in CC
                .Range("C" & lRow).Value = objItem.To 'in colonna C mette i destinatari in TO
                .Range("E" & lRow).Value = objItem.Body ' in colonna E mette il testo
                .Range("F" & lRow).Value = objItem.ReceivedTime ' in colonna F mette data e ora di ricezione
                '.Range("C" & lRow).Value = objItem.BodyFormat
                '.Range("E" & lRow).Value = objItem.HTMLBody
                '.Range("F" & lRow).Value = objItem.RTFBody
        End With
        Next
        oXLwb.Save
        oXLwb.Close
    End Sub
    



  • di Luca73 data: 02/09/2015 15:49:46

    Prova questo prima
    apri outlook vai in Sviluppo poi clicca Visual basic
    si apre una shermata con i progetti VBA
    vai su Microsoft Outlook Oggetti
    quindi su ThisOutlookSession
    cancella quello che hais scritto prima,
    in alto ci sono due caselle a discesa e dopo che hai cancellato tutto in quella a sinistra ci dovrebbe essere scritto "generale" in quella a destra "(dichiarazioni)"
    Clicca su quella a sinistra e metti su "Application"
    Dopo in quella a destra seleziona NewMailEx

    ti dovrebbe comparire sotto una macro vuota di nome
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

    End Sub

    a questo punto scrivi l'istruzione qui sotto tra le due righe


    Poi dimmi se quando ti arriva una mail ti compèare un messaggio sullo schermo e cosa dice.
    Ciao
    Luca
     
    msgbox "arrivata mail " & EntryIDCollection






  • di Davide2574 data: 02/09/2015 21:49:27

    scusami se ti rispondo ora.
    prima ero impegnato.
    ho provato a fare quello che mi hai spiegato non mi compare nulla.
    forse dovevo collegare qualcosa con il file di xlsx o xlsm?
     
    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    
    End Sub
    
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    
    MsgBox "arrivata mail " & EntryIDCollection
    
    End Sub



  • di mb data: 03/09/2015 09:18:06

    gentilissimo luca
    era una cosa che stavo cercando proprio ieri ho testato il tuo esempio e direi che mi piace, mi potresti aiutare a capire però perche avendo inserito nel testo della mail incaii 2350 poi quando mi riporta i dati nell foglio di excel li scrive in questo modo strano

    ti allego il file


     




  • di Davide2574 data: 03/09/2015 09:31:28

    salve mb

    ma a te funziona? allora dove ho sbagliato?



  • di mb data: 03/09/2015 09:41:50

    Ciao Davide

    premesso che io sono un dilettante ... e cerco soluzioni o aiuti in vba, con excel formule e "macro registrate ( se mi leggono i maghi di vba) ho seguito le istruzioni che sono state fornite

    o creato un cartella e inserito il file che vedi allegato

    sono andato su outlook e in sviluppo ho inserito nella riga miofile ( 7) il percorso dove salvare i dati

    e quello che vedi nel file che ho allegato è il risultato della prova direi che come inizio non è male

    p. s devo essere sincero con tutti su un'altro forum avevo propio aperto post identico vedo cosa esce da tutti e due ma direi che sono entrambi validi (dipende sempre qual'è l'obbiettivo finale )

    ciao

     
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
        Dim MioFile As String
        Dim varEntryIDs
        Dim objItem As Object
        Dim i As Integer
        ' modificare il percorso e il nome file
        MioFile = "C:provaListaMail.xls"
        varEntryIDs = Split(EntryIDCollection, ",")
        Dim oXLApp As Object, oXLwb As Object, oXLws As Object
        Dim lRow As Long
     '~~> Establish an EXCEL application object
        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
        '~~> Open the relevant file
        Set oXLwb = oXLApp.Workbooks.Open(MioFile)
        Set oXLws = oXLwb.Sheets("MailRic")
        lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(-4162).Row + 1
        oXLApp.Visible = True
        For i = 0 To UBound(varEntryIDs)
            Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
            With oXLws
                .Range("A" & lRow).Value = objItem.Subject 'in colonna A mette l'oggetto
                .Range("B" & lRow).Value = objItem.SenderName 'in colonna B mette che ha inviato
                .Range("C" & lRow).Value = objItem.CC 'in colonna C mette i destinatari in CC
                .Range("C" & lRow).Value = objItem.To 'in colonna C mette i destinatari in TO
                .Range("E" & lRow).Value = objItem.Body ' in colonna E mette il testo
                .Range("F" & lRow).Value = objItem.ReceivedTime ' in colonna F mette data e ora di ricezione
                '.Range("C" & lRow).Value = objItem.BodyFormat
                '.Range("E" & lRow).Value = objItem.HTMLBody
                '.Range("F" & lRow).Value = objItem.RTFBody
        End With
        Next
        oXLwb.Save
        oXLwb.Close
    End Sub
    



  • di Davide2574 data: 03/09/2015 10:02:20

    accidenti che ci sei riuscito. Io sono più big dilettante. ehehehe
    una curiosità . questa : MioFile = "C:provaListaMail.xls" il file deve essere posizionato nella directory c: e non su d:?

     
    MioFile = "C:provaListaMail.xls"



  • di mb (utente non iscritto) data: 03/09/2015 10:21:50

    ciao

    se nel tuo computer i dati li salvi in D devi solo sostituire nella sub la C con D

    prova..



  • di Davide2574 data: 03/09/2015 10:42:34

    già provato niente da fare.
    allora ho inserito questi codici nello sviluppo di Outlook
    poi salva e poi quando ricevo un email dovrebbe aprire da solo il file Excel giusto? oppure devo premere l'avvio F5? perché ho provato ad avviare con f5 ma risulta vuota come macro.
     
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
        Dim MioFile As String
        Dim varEntryIDs
        Dim objItem As Object
        Dim i As Integer
        ' modificare il percorso e il nome file
        MioFile = "D:ProfilixxxxxDesktopProva.xlsm"
        varEntryIDs = Split(EntryIDCollection, ",")
        Dim oXLApp As Object, oXLwb As Object, oXLws As Object
        Dim lRow As Long
     '~~> Establish an EXCEL application object
        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
        '~~> Open the relevant file
        Set oXLwb = oXLApp.Workbooks.Open(MioFile)
        Set oXLws = oXLwb.Sheets("MailRic")
        lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(-4162).Row + 1
        oXLApp.Visible = True
        For i = 0 To UBound(varEntryIDs)
            Set objItem = Application.Session.GetItemFromID(varEntryIDs(i))
            With oXLws
                .Range("A" & lRow).Value = objItem.Subject 'in colonna A mette l'oggetto
                .Range("B" & lRow).Value = objItem.SenderName 'in colonna B mette che ha inviato
                .Range("C" & lRow).Value = objItem.CC 'in colonna C mette i destinatari in CC
                .Range("C" & lRow).Value = objItem.To 'in colonna C mette i destinatari in TO
                .Range("E" & lRow).Value = objItem.Body ' in colonna E mette il testo
                .Range("F" & lRow).Value = objItem.ReceivedTime ' in colonna F mette data e ora di ricezione
                '.Range("C" & lRow).Value = objItem.BodyFormat
                '.Range("E" & lRow).Value = objItem.HTMLBody
                '.Range("F" & lRow).Value = objItem.RTFBody
        End With
        Next
        oXLwb.Save
        oXLwb.Close
    End Sub
    



  • di Luca73 data: 03/09/2015 11:21:30

    Ciao
    prova ad andare in Outlook -> File -> Opzioni
    Centro Protezione -> pulsante Impostazione Centro Protezione
    Impostazioni Macro
    e poi seleziona Visualizza Notifiche per tutte le macro o (se vuoi) Attiva Tutte le macro
    e riprova
    poi fammi saprere
    Le macro Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) vengonbo attuate quando riicevi una mail.
    Ciao
    Luca







  • di Davide2574 data: 03/09/2015 12:29:17

    Ciao Luca

    ho provato ad impostare quello che mi hai detto , ho mezzo x su Visualizza Notifiche per tutte le macro .
    e riprovato. niente da fare ZERO!!!!
    O forse perché lavoro un pc con server diverso. Allora tra qualche ore riprovo sul mio mini notebook.
    Forse server è diverso tra mio e quello di lavoro cioè le cartelle.
    Altrimenti mi mandi il file Excel per fare un confronto al mio dove ho sbagliato. E può darsi funziona

    Ciao

    Davide

    ps come hai imparato i codici? leggendo qui le discussioni? o un libro?



  • di mb data: 03/09/2015 14:15:51

    Ciao Luca

    ho riwscontrato un problema ma non so la causa

    quando ricevo una mail viene fatto il salvataggio nel fil edi excel ma rimane aperta la videata di visualbasic su outlook
    Grazie per l'attenzione



  • di Davide2574 data: 03/09/2015 14:23:59

    niente da fare. Ho provato sul mio mini notebook, non funziona.
    Forse c'entra la versione di outlook ed excel?
    Io ho office 2010.

    Mi sa che alzo la bandiera bianca!!! e dovrei andare alle lezioni di VBA na quella scuola vuole 2.000 euro



  • di mb data: 03/09/2015 17:58:20

    buonasera a tutti

    avendo ricevuto molti aiuti da questo forum ritengo doveroso fornire un link interessante sull'argomento archiviazione mail da outlook a excel

    h t t p://forum.ialweb.it/forum_posts.asp?TID=16466148&PN=2&title=copiare-dati-mail-in-un-foglio-excel

    ps : se poi Luca senza fretta riesci a darmi una dritta sull problema riscontrato questa mattina ti ringrazio vivamente ( adesso però non mi permette di rimuovere this outlook session ?? )

    n.b penso comunque che li utilizerò tutti e due a seconda delle necessità, tutto quanto fa cultura




  • di mb data: 04/09/2015 16:40:52

    Carissimo Luca scusa il ritardo nell'allegarti l'immmagine della videata che rimane aperta in outlook

    sono stato impegnato in altri problemi e non sono riucito ad inviartela prima

    Se riesci a trovarmi dov'è il problema ti ringrazio ( .... ti ringrazio comunque per il lavoro svolto...... )





  • di mb (utente non iscritto) data: 04/09/2015 18:30:07

    trovato la soluzione ai caratteri strani che vengono salvati nel file di Excel, è necessario inserire la funzione =LIBERA che permette di torlgiere tutti i caratteri "strani" all'interno di una stringa di dati

    buon fine settimana



  • di Davide2574 data: 05/09/2015 23:31:13

    Volevo sapere voi nel vba di excel od outlook Nel centro protezione, ed andando su Autori Attendebili, voi avete inserito qualcosa per poter funzionare i file di macro?
    Che sia questo problema vuota ad impedire a far funzionare la macro?
    Perchè al lavoro c'e' qualcosa scritto negli Autori attendebili mentre il mio notebook non c'e' scritto. Al lavoro funziona qualcosa con il file mentre qui a casa non funziona.
    Spero che qualcuno mi potrebbe confermare.



  • di mb (utente non iscritto) data: 05/09/2015 23:47:49

    Ciao non sono a casa, a me rimane solo il problema che se non sono vicino al PC non mi chiude più la videata con le istruzioni vba ma non so come risolverlo spero che Luca ci aiuti ad inizio settimana



  • di Davide2574 data: 14/09/2015 09:03:29

    ciao Luca

    vorrei sapere dove ho sbagliato, cmq alla fine funziona per email ma rimane un mistero , perché dopo che ho caricato i codici e non funzionava mai poi salvato e spento il pc e poi acceso e funziona . Quindi ogni volta la modifica o nuovi codici bisogna sempre riavviare l'outlook o il pc?
    Ora chiedo a te come si converte il formato html in testo e ho provato a cercare nel Google ma ecco ho modificato per html ma mi da errore tutto rosso: da StrBody = fino alla fine olMail.HTMLBody = StrBody . forse ho sbagliato qualcosa?
    Grazie luca.
    Buona giornata

    Davide
     
    "& ""& _ ""& _ ""& _ ""& _ ""& _ ""& _ ""& _ ""& _ olMail.HTMLBody = StrBody olMail.Display End With '~~> Close and Clean up Excel oXLwb.Close (True) oXLApp.Quit Set oXLws = Nothing Set oXLwb = Nothing Set oXLApp = Nothing Set olMail = Nothing Set olNS = Nothing End Sub
    Const xlUp As Long = -4162
    
    Sub ExportToExcel(MyMail As MailItem)
        Dim strID As String, olNS As Outlook.NameSpace
        Dim olMail As Outlook.MailItem
        Dim StrBody As String
        Dim strFileName As String
    
        '~~> Excel Variables
        Dim oXLApp As Object, oXLwb As Object, oXLws As Object
        Dim lRow As Long
    
        strID = MyMail.EntryID
        Set olNS = Application.GetNamespace("MAPI")
        Set olMail = olNS.GetItemFromID(strID)
    
        '~~> Establish an EXCEL application object
        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
    
        '~~> Show Excel
        oXLApp.Visible = True
    
        '~~> Open the relevant file
        Set oXLwb = oXLApp.Workbooks.Open("D:Profiliu254240DesktopProva.xlsm")
    
        '~~> Set the relevant output sheet. Change as applicable
        Set oXLws = oXLwb.Sheets("MailRic")
    
        lRow = oXLws.Range("A" & oXLApp.Rows.Count).End(xlUp).row + 1
    
        '~~> Write to outlook
        With oXLws
            '
            '~~> Code here to output data from email to Excel File
            '~~> For example
            '
            .Range("A" & lRow).Value = olMail.Subject
            .Range("B" & lRow).Value = olMail.SenderName
            .Range("C" & lRow).Value = olMail.ReceivedTime
            .Range("D" & lRow).Value = olMail.HTMLBody
            
            strBody =
            
    "
    12/09/2015 12:30:00Milan - JuveAway1X2100.00William Hill5Betfair4.8