VBA Outlook üzenet mentése excelbe

VBA Outlook üzenet mentése excelbe
2021-12-21T09:32:08+01:00
2021-12-21T17:35:25+01:00
2022-10-15T21:21:08+02:00
1Sopi
Sziasztok!

Azt szeretném elérni, hogy ha Outlook-ban egy E-mailt küldök, akkor a küldés pillanatában, megvizsgálja a tárgyat és egy bizonyos szó egyezés esetén a levél adatait lementi egy előre meghatározott excel következő üres sorába, majd azt zárja is be.
Ott akadtam el, hogy az excel fájl megnyílik (számomra nem látható módon, abból ki tudok olvasni adatokat), de beleírás esetén elkezd "homokórázni" és kilépni/bezárni sem tudom (aláhúztam a kódot ahol pl "végtelenségig teker"). Több féle képpen is próbáltam, de nem működik nekem. 

Outlook VBA kódom:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim Targy, valasz, Munkafuzet, Munkalap, Fajl As String
    Dim i As Integer
    Targy = Item.Subject

    For i = 1 To Len(Targy)
        If Mid(Targy, i, 7) = "Feladat" Then
            valasz = MsgBox("Biztos, hogy el akarod elküldeni?", vbYesNo + vbQuestion)
            Cancel = (valasz = vbNo)
            
            Fajl = "c:\Utils\Emailes_Feladatok.xlsx"
            Set Munkafuzet = Excel.Workbooks.Open(Fajl)
            'Set Munkalap = Excel.Worksheets.Visible(1)
            'Munkalap.Activate
            MsgBox Cells(1, 1)
            'MsgBox Item.Body
            'MsgBox Item.To
            'MsgBox Item.CC
            'outlook.
            
            Excel.Application.Cells(2, 1) = 1
            'ActiveWorkbook.Worksheets(1).Range("A2") = 1
            'Set Munkafuzet = Excel.Workbooks.Close(Fajl)
            'Workbooks(Munkafuzet).Worksheets("Munka1").Range("A2") = 1
            'Workbooks(Munkafuzet).Close
            ActiveWorkbook.Close
        End If
    Next i
End Sub
Mutasd a teljes hozzászólást!
Rájöttem. 
Sok próbálkozás és feladat megszakítás után megláttam a "Akarja-e menteni a fájlt bezárás elött?" ablakot. Ezért homokórázott mindíg..


Szal ez maradt ki:
ActiveWorkbook.Close SaveChanges:=True

De köszönöm.
Mutasd a teljes hozzászólást!

  • Szia!
    Ha már megnyitottad az Excel-t és változóknak értéket adtál, akkor elég a változókat használni és nem kell Excel.Application előtag.

     Set Munkafuzet = Excel.Workbooks.Open(Fajl)

    A Munkafuzet nevű változód "tudja", hogy az Excel-ben van.
    Így pl. az első munkalapjára hivatkozhatsz egyszerűen így:

    Set Munkalap=Munkafuzet.Sheets(1)
    Excel.Application.Cells(2, 1) = 1

    helyett elegendő a Cells(2,1) = 1,
    hiszen az Msgbox Cells(1,1) is működik.  Miért is?
    A megnyitott munkafüzet valamelyik munkalapja - az amelyik utoljára volt használva az adott munkafüzetben - lesz aktív a megnyitás után. (Ez persze nem feltétlenül esik egybe azzal, amit használni szeretnél, ezért kell meghatározni a munkalapot.)
    Az aktív munkalapon elég a tartomány (cella) megadása, alapértelemezett az aktív munkalap.
    Ha másik munkalapra szeretnél írni, akkor meg kell adni a munkalapot is hozzá, előző példát folytatva:
    Munkalap.Cells(2,1) = 1
    a megnyitott munkafüzet (index szerint) első munkalapjára fogja az értékadást végrehajtani.
    Nem szükséges az adott munkalapot aktívvá tenni sem a Set utasításnál sem utána a vele való műveleteknél, mivel a Munkalap nevű változód már meghatározta.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Nem működik jól, mármint a kód szerintem is rendben van, de amikor ide ér a program
     Cells(2,1) = 1
    akkor, el kezd "homokórázni" és nem történik semmi.
    Én beállítás problémára gyanakszom, de passz.
    Mutasd a teljes hozzászólást!
  • Rájöttem. 
    Sok próbálkozás és feladat megszakítás után megláttam a "Akarja-e menteni a fájlt bezárás elött?" ablakot. Ezért homokórázott mindíg..


    Szal ez maradt ki:
    ActiveWorkbook.Close SaveChanges:=True

    De köszönöm.
    Mutasd a teljes hozzászólást!
  • Szia!
    Akkor ez már nem aktuális.
    Örülök, hogy sikerült megoldanod.
    Üdv.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd