locked
VBA Outlook 2010 - Cum detectez un mail in inbox si un cuvant in acesta? RRS feed

  • Întrebare

  • Salut,

    Nu am mai lucrat cu asa ceva pana acum asa ca am decis sa cer ajutorul unor oameni mai experimentati. Ideea e ca eu primesc periodic emailuri care ma anunta ca anumite firme partenere si-au schimbat statutul( statutul poate fi ISSUED, WITHDRAWN, EXPIRED). Aplicatia mea trebuie sa detecteze aceste emailuri dupa numele subiectului si sa caute in ele aceste cuvinte care reprezinta noul statut al firmelor. Cuvantul se afla pe ultima pozitie din rand(pozitia 9), randul 15( mai sunt si 6 randuri inafara de cele 15 scrise pe care nu e scris nimic). Ulterior, in fuctie de statul firmei va trebui sa faca anumite modificari in unele fisiere Excel si Word insa deocamdata trebuie sa aflu raspunsul la intrebarea de mai sus.

    Multumesc!


    • Editat de Ionut Hapa miercuri, 20 mai 2015 08:24
    miercuri, 20 mai 2015 05:20

Răspunsuri

  • Salut Ionut,

    ai aici un link unde poti gasi codul necesar pentru a executa o functie de Outlook macro cand iti intra in inbox un nou email: 

    http://stackoverflow.com/questions/5826158/using-vb-vba-to-search-outlook-messages-and-extract-specific-data-into-excel-wor

    Iar in acest link gasesti codul necesar pentru a cauta in continutul unui email (olMail.Body), un cuvant anume:

    http://stackoverflow.com/questions/20082550/excel-vba-for-searching-in-mails-of-outlook

    (In primul link ai un mic exemplu de cum ai putea face chestia cu modificarea datelor in Excel).

    Iti las aici un exemplu de cod ca sa iti faci o idee de cum ar fi:

    Public WithEvents myOlItems As Outlook.Items
    
    Public Sub Application_Startup()
    
       ' Reference the items in the Inbox. Because myOlItems is declared
       ' "WithEvents" the ItemAdd event will fire below.
       Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
    
    End Sub
    
    
    Private Sub myOlItems_ItemAdd(ByVal Item As Object)
        If TypeName(Item) = "MailItem" Then
          ' aici cautam textul in subiect
          If Item.Subject = "Textul meu" Then
              ' iar aici cautam textul in continutul emailului
              If (InStr(1, Item.Body, "proba", vbTextCompare) > 0) Then
                  ' aici am pus eu un exemplu de a ne deschide mailul dar poti pune orice alta actiune
                  Item.Display
              End If
          End If
        End If
    End Sub

    Sper sa iti fie de folos.

    Salut.



    joi, 21 mai 2015 14:45
  • Salut Ionut,

    e buna ideea cu "New Rule". Codul meu era un exemplu, modeleazal cum crezi tu ca e mai bine, dar cu linkurile pe care ti le-am dat eu cred ca ai putea rezolva problema.

    Ideea este urmatoarea: 

    -cand iti ajunge un email nou -> cauti datele necesare in el

    -daca ai rezultat pozitiv -> iei datele necesare din bodyul emailului si faci ce ai nevoie cu ele

    Eventul Application_Startup() din codul meu, inlocuieste eventul "New Rule" al tau.. la mine pusesem sa porneasca codul cand pornea aplicatia de Outlook nimic mai mult. 

    Application_Startup() se produce de fiecare data cand porneste aplicatia Outlook.

    myOlItems_ItemAdd(ByVal Item As Object) se produce cand iti intra un nou email in Inbox (iar Item este emailul nou, il primesti ca o variabila ca sa il poti folosi in codul tau).

    Salut!

    • Marcat ca răspuns de Ionut Hapa luni, 15 iunie 2015 19:29
    luni, 25 mai 2015 08:40

Toate mesajele

  • Salut Ionut,

    ai aici un link unde poti gasi codul necesar pentru a executa o functie de Outlook macro cand iti intra in inbox un nou email: 

    http://stackoverflow.com/questions/5826158/using-vb-vba-to-search-outlook-messages-and-extract-specific-data-into-excel-wor

    Iar in acest link gasesti codul necesar pentru a cauta in continutul unui email (olMail.Body), un cuvant anume:

    http://stackoverflow.com/questions/20082550/excel-vba-for-searching-in-mails-of-outlook

    (In primul link ai un mic exemplu de cum ai putea face chestia cu modificarea datelor in Excel).

    Iti las aici un exemplu de cod ca sa iti faci o idee de cum ar fi:

    Public WithEvents myOlItems As Outlook.Items
    
    Public Sub Application_Startup()
    
       ' Reference the items in the Inbox. Because myOlItems is declared
       ' "WithEvents" the ItemAdd event will fire below.
       Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
    
    End Sub
    
    
    Private Sub myOlItems_ItemAdd(ByVal Item As Object)
        If TypeName(Item) = "MailItem" Then
          ' aici cautam textul in subiect
          If Item.Subject = "Textul meu" Then
              ' iar aici cautam textul in continutul emailului
              If (InStr(1, Item.Body, "proba", vbTextCompare) > 0) Then
                  ' aici am pus eu un exemplu de a ne deschide mailul dar poti pune orice alta actiune
                  Item.Display
              End If
          End If
        End If
    End Sub

    Sper sa iti fie de folos.

    Salut.



    joi, 21 mai 2015 14:45
  • Salut Cristian,

    In primul rand iti multumesc pentru raspunsul tau, foarte ultil ca de obicei. Pentru a lansa codul cand primesc mail am gasit o solutie folosind "New Rule"

    Continutul mailului arata cam asa:

    --------------------------------------------------------------------------------------------------------

         

    -----Message d'origine-----

    De : IATF Global Database 

    Envoyé : lundi 18 mai 2015 17:45

    À : Nume Prenume

    Objet : IATF Global Database: Certificate Status Change// ascesta este subiectul dupa care trebuie sa se execute macroul

    Dear Nume Prenume,

    This is an automatically generated email from the IATF Database (aici e un link).

    A Client Certificate Status has changed.

                    Client "Compania in cauza. // 01 111 20778" (Sibiu, jud. Sibiu, Romania)

                    aici e un link

                    IATF Certificate No. "0145565"

                    Certification Body: "TIS"

                    OEM: "Compania mea"

                    Supplier Code: "611909 ( Alt nume)"

    The status has been changed from ISSUED to SUSPENDED

    Date of change: 18/05/2015

    This notification was generated automatically by the IATF Database. Please do not reply to this email.

    If you have any questions about this notification, please contact your responsible Oversight Office.

    Regards,

    IATF Database Support

    ----------------------------------------------------------------------------------------------------------

    Structura mailului va fi mereu aceeasi, se vor schimba decat datele despre companie si propozitia scrisa ingrosat care poate fi "The status has been changed from ISSUED to WITHDRAW" sau alte combinatii de statusuri. Pe mine ma intereseaza decat ultimul cuvant din propozitie insa ma gandeam ca pentru a face cautarea mai sigura sa fac o serie de if-uri in care stringul cautat sa fie aceasta propozitie cu toate combinatiile posibile. Pentru a testa daca functioneaza o sa pun un msg box.

    Exemplul tau mi-a dat o oarecare idee insa nu inteleg subrutina Application_Startup() si de ce la al doilea sub mai e nevoie de obiectul din paranteze. Multumesc!

    vineri, 22 mai 2015 09:47
  • Salut Ionut,

    e buna ideea cu "New Rule". Codul meu era un exemplu, modeleazal cum crezi tu ca e mai bine, dar cu linkurile pe care ti le-am dat eu cred ca ai putea rezolva problema.

    Ideea este urmatoarea: 

    -cand iti ajunge un email nou -> cauti datele necesare in el

    -daca ai rezultat pozitiv -> iei datele necesare din bodyul emailului si faci ce ai nevoie cu ele

    Eventul Application_Startup() din codul meu, inlocuieste eventul "New Rule" al tau.. la mine pusesem sa porneasca codul cand pornea aplicatia de Outlook nimic mai mult. 

    Application_Startup() se produce de fiecare data cand porneste aplicatia Outlook.

    myOlItems_ItemAdd(ByVal Item As Object) se produce cand iti intra un nou email in Inbox (iar Item este emailul nou, il primesti ca o variabila ca sa il poti folosi in codul tau).

    Salut!

    • Marcat ca răspuns de Ionut Hapa luni, 15 iunie 2015 19:29
    luni, 25 mai 2015 08:40
  • Ok si sa zicem ca folosesc ce ai propus tu, unde ar trebui sa scriu codul ala? L-am pus in ThisOutlookSesion, l-am adaptat, mi-am trimis email cu subiectul respective insa nu se intampla nimic.
    miercuri, 27 mai 2015 05:32
  • Salvezi tot, inchizi panoul de Developer si redeschizi Outlook-ul si ar trebui sa iti mearga.

    Trimite-ti un email cu subiectul pe care l-ai pus tu in cod si cu textul necesar in body. Cand detecteaza un email nou care sa indeplineasca IFurile o sa iti deschide in full screen emailul -> Item.Display

    Salut.

    miercuri, 27 mai 2015 09:02
  • Salut Cristian,

    Am reusit sa fac ce mi-am propus cu codul tau numai ca al folosit o regula in loc de Application_Startup().

    Multumesc si sa ai numai zile faine!

    marți, 9 iunie 2015 04:34
  • Perfect, ma bucur ca ai reusit !

    Daca ti-a fost de folos raspunsul meu, marcheazal ca util.

    Salut ;)

    joi, 11 iunie 2015 16:34