Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel VBA - odeslání e-mailu

Ahoj, obracím se na Vás s prosbou o radu jak funkčně odeslat e-mail přes VBA prostřednictvím Outlooku.
Využívám tento kód

Sub ExcelOutlookPriloha()

    'Tools / References / Microsoft Outlook x.x Object Library

    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
   
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)

    With OutMail
   
        'adresát
        .To = "nekdo@nekde.cz"
       
        'kopie pro
        .CC = "schranka@email.com"
       
        'skrytá kopie pro
        .BCC = "info@firma.org"
       
        'předmět zprávy
        .Subject = "Předmět zprávy"
       
        'text zprávy
        .Body = "1. řádek zprávy" & Chr(13) & "2. druhý řádek zprávy"
       
        'aktivní (uložený) sešit jako příloha
        .Attachments.Add ActiveWorkbook.FullName
       
        'jiná příloha
        .Attachments.Add ActiveWorkbook.Path & "\soubor.txt"
       
        'zobrazení okna se zprávou (není nutné)
        .Display
       
        'odeslání zprávy
        '.Send
       
    End With
   
    'uvolnění z paměti
    Set OutMail = Nothing
    Set OutApp = Nothing
   
End Sub

Čerpáno z TÉTO STRÁNKY

Problém, kterého sem si všimnul až po nějaké době je, že email se neodešle ihned při kliknutí na tlačítko odeslat (v okně Outlooku nová zpráva), ale uloží se do konceptů. K odeslání dochází až tehdy pokud se klasicky otevře Outlook.

Nechat proběhnout kód aby vytvořil zprávu a poté ještě znovu nahodit Outlook aby došlo k faktickému odeslání jaksi postrádá smysl. Věděl by někdo jak z toho ven.

PS: jedná se o office 2007

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak sem našel možné řešení ZDE Několikrát sem testoval a vypadá to, že tohle je to pravé ořechové.…
Siki83 06.04.2015 11:43
Siki83
Siki, prosím Ťa, narazil som na potrebu zasielať mail z Excelu 2013. Ty píšeš, že si poriešil pre 20…
robert13 09.09.2015 18:43
robert13
Bohužel musím Tě zklamat makro používám výhradně na verzi 2007 na 2010 jsem netestoval (mám je na st…
Siki83 10.09.2015 18:52
Siki83
Dakujem, skusim, ale pravdepodobne bezuspesne, lebo mne to slo este aj na 2010, zmena nastala az na…
robert13 11.09.2015 07:16
robert13
Ahoj, podařilo se Ti rozchodit to odesílání?
Siki83 26.09.2015 14:21
Siki83
Ahoj, nepodarilo, koncim na .Display, po ktorom je nutne obsluzit tlacidlo outlooku Odoslat. Lenze k… nový
robert13 26.09.2015 17:27
robert13
Ahoj, prečo dáváš display a nie .send ? Keby niekto potreboval pomoc s VBA, tak ma kontakujte www.vb… nový
vb_fanda 17.12.2015 14:00
vb_fanda
nerobil som to pre seba ja mám E 2010 (kde to funguje), ale robil som to pre stroj, ktorý má E 2013.… poslední
robert13 17.12.2015 14:52
robert13

Tak sem našel možné řešení ZDE

Několikrát sem testoval a vypadá to, že tohle je to pravé ořechové.

Edit: Věděl by někdo jak sestavit kód, pokud bych chtěl nahradit příkaz send za display? Pokud provedu náhradu, tak se zobrazí okno se zprávou, ale makro pokračuje v chodu (nečeká něž uživatel zprávu fyzicky odešle) a zpráva se opět uloží do složky "k odeslání".

Siki,
prosím Ťa, narazil som na potrebu zasielať mail z Excelu 2013.
Ty píšeš, že si poriešil pre 2007 ale možno si to odvtedy riešil aj pre 2013.
V 2010 mám funkčné zasielanie ale ten istý kód v 2013 sa dá síce ošetriť proti nejakým tým chybám, kód prebehne bez chyby, akurát že sa nič neodošle.
Nemáš náhodou riešenie?

Díky

Bohužel musím Tě zklamat makro používám výhradně na verzi 2007 na 2010 jsem netestoval (mám je na stolním PC, kde s tímto makrem nepracuji). Verzi 2013 nemám vůbec k dispozici.
Zde kód který mi funguje:

Sub ExcelOutlookPriloha()
    '!!!!!Před použitím je třeba v Tools / References zaškrtnout volbu Microsoft Outlook xx.0 Object Library.!!!!!
    'Tools / References / Microsoft Outlook x.x Object Library

    Dim OutApp As Outlook.Application
    Dim OutMail As Outlook.MailItem
    Dim objNsp As Object
    Dim colSyc As Object
    Dim objSyc As Object
    Dim i As Integer
    Dim adresat As String
   
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(olMailItem)
    Set objNsp = OutApp.Application.GetNamespace("MAPI")  'CORRECTION to Refer to the OutLook Application correctly
    Set colSyc = objNsp.SyncObjects
    
    adresat = "seznam@seznam.cz"
    
    With OutMail
   
        'adresát
        .To = adresat
        
        'kopie pro
        '.CC = "schranka@email.com"
       
        'skrytá kopie pro
        '.BCC = "info@firma.org"
       
        'předmět zprávy
        .Subject = "Předmět zprávy"
       
        'text zprávy
        '.Body = "1. řádek zprávy" & Chr(13) & "2. druhý řádek zprávy"
       
        'aktivní (uložený) sešit jako příloha
        .Attachments.Add ActiveWorkbook.FullName
        
        'Nastavení preferovaného účtu pro odeslání pošty - v tomto případě druhý v pořadí
        'Dostupné od verze Office 2007
        .SendUsingAccount = OutApp.Session.Accounts.Item(2)

        'jiná příloha
        '.Attachments.Add ActiveWorkbook.Path & "\soubor.txt"
       
        'zobrazení okna se zprávou (není nutné)
        '.Display
       
        'odeslání zprávy
        .Send
       
    End With
     
    For i = 1 To colSyc.Count
        Set objSyc = colSyc.Item(i)
        objSyc.Start
    Next

    OutApp.Quit
    MsgBox "Zpráva byla odeslána na adresu: " & adresat, vbInformation
    'uvolnění z paměti
    Set OutMail = Nothing
    Set objNsp = Nothing
    Set colSyc = Nothing
    Set objSyc = Nothing
    Set OutApp = Nothing
   
End Sub

Ahoj, nepodarilo, koncim na .Display, po ktorom je nutne obsluzit tlacidlo outlooku Odoslat.
Lenze kym v 2010 mi kod povodne generoval viac adries s ciastkovymi spravami a v cykle krasne odoslalo x sprav, tak v 2013 cyklus odosielania nemozem pouzit. Myslel som, ze mi to naotvara x .Display okien a budem ich musiet rucne poodklikavat, ale takto to nefunguje. Tak som to zmenil tak, ze v cykle sa mi akurat nacita x adresatov do jednej hromadnej spravy, takze na zaver odklikavam len jedno odoslanie. Tym vsak nemozem kazdemu zaslat len na neho situ spravu, ale posielam zovseobecneny oznam. Nie je to to, co som povodne chcel, ale moze to byt aj takto... Takze ma to netlaci hladat ine riesenie...

Zpět do poradny Odpovědět na původní otázku Nahoru