Wysyłanie maila przez outlook makrem

Pytania, uwagi, problemy związane z Microsoft Office Outlook, wersje 2007, 2010, 2013 i 2016.

Moderator: Moderatorzy

Wysyłanie maila przez outlook makrem

Postprzez grzesioi » N 16.09.2018 23:31

Znalazłem dwa kody żeby wysłać mail ale nie działają jak bym potrzebował.

pierwszy:
Jak w tym kodzie zmienić treść wiadomości żeby wysyłało mi tabelę z arkusza "lista" ale niew załączniku. Teraz wysyła stałą wiadomość. Można ustawić jakieś odwołanie

Kod: Zaznacz cały

Sub WyslijMail()
Dim Poczta As Object
Dim MojMail As Object

Set Poczta = CreateObject("outlook.application")
Set MojMail = Poczta.createitem(0)
    With MojMail
        .To = "AdresDo@domena.pl"
        '.CC = "AdresDW@DOMENA.PL"
        .Subject = "Temat maila"
        .ReadReceiptRequested = False
        .OriginatorDeliveryReportRequested = False
        .body = "Tabela z  Arkusza Lista"
      '  .Attachments.Add "c:\Folder\MojZalacznik.xlsx"
        '.Display
        .send
    End With
End Sub



Drugi:

Ten kod zaznacza to co chcę wysłać, ale działa tylko jak jest włączony program Outlook, a ja bym chciał żeby wysyłało mail przy wyłączonym. ( pierwszy kod wysyła w tle) Ewentualnie może być tak, że makro uruchomi w tle i zamknie program na czas wysyłana maila.




Kod: Zaznacz cały
Sub wyślij_mail()

   ' Select the range of cells on the active worksheet.
   Sheets("Lista").Select
   Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
   
   ' Show the envelope on the ActiveWorkbook.
   ActiveWorkbook.EnvelopeVisible = True
   

   With ActiveSheet.MailEnvelope
      .Item.To = "asdfgfds@op.pl"
      .Item.Subject = " blabla aaaaa"
     .Item.Send
      '.Item.Display
   End With
End Sub
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 07:17

Jak rozumiem chodzi o Excela.

Po pierwsze jeśli ma to być tabelka to mail musi być .HTMLBody a nie .Body
po drugie sama tabela jest też napisana w HTMLU a więc treść musi być też HTML
np jeśli wpiszesz jedno z dwóch linijek to zauważysz różnicę
Kod: Zaznacz cały
.body = "Ala ma kota"
.htmlbody = "<b>Ala</b> ma kota"

Na podobnej zasadzie używając języka HTML możesz zbudować tabelkę (ramkę o dowolnej grubości) przechodząc w pętli po obiektach range.

Drugie zagadnienie (nadaje się na drugi wątek) to wysyłanie bez outlooka, bo sam outlook nie wyśle nic jak jest wyłączony (prawda?)
Jeśli nie chciał być sam dochodzić do rozwiązania to tutaj zaproponuje oprogramowanie w formie dodatku do Excela, mechanizm wysyłający dane w treści http://vbatools.pl/email-z-obszaru-danych-arkusza/ ale polega to na współpracy z Outlookiem, ponieważ to dość rozbudowany mechanizm bazujący na obiektach excela. Czytaj, aplikacja musi być obecna na komputerze - włączona.
A jeśli chodzi o sam załącznik to kwestia jest prostsza i w tym, drugim dodatku jest już zawarty osobny klient pocztowy http://vbatools.pl/email-skompresowany-zalacznik/, czyli działa bez Outlooka i rozwiązanie posiada inne własności obszarowe.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez grzesioi » Pn 17.09.2018 08:41

dzięki za odpowiedz.
Z tym wysyłaniem bez Outlooka to tak w przenośni. Może dało by się go włączyć i wyłączyć w tle na potrzeby wysłania pliku. wiem jak włączyć ale nie wiem jak makrem go wyłączyć. ;)

Kod: Zaznacz cały
Sub włączenie()
Dim varID
varID = Shell("C:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE")
End Sub


A da się włączyć makrem ze skrótu i wyłączyć? ( Mogę wtedy włączać zminimalizowany)
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft Outlook 2010.ink
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 09:16

Outlook przy połączeniu realizuje dość dużo czynności, niezależnych od samej aplikacji (np realizuje połączenia z kontami co do których czas wykonania zależny jest od czynników zewnętrznych).
Nie mozna zatem przyrównywac Outlooka, np do Excela, ACC czy innego programu z office ,którego włączenie i wyłączenie nie rodzi żadnych pozostałych zdarzeń.
Nie wiem dlaczego ci zależy aby aplikacja nie była włączona/wyłączona? Moze chodzi ci o to aby ktoś nie zapomniał jej włączyć - czy może ktoś ma jej nie używać wcale? bo nie rozumiem.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez grzesioi » Pn 17.09.2018 09:24

używam innego klienta poczty dlatego Outlooka potrzebuję tylko do wysłania wiadomości z Excela żeby nie bawić się w kopiowanie i wklejanie w inny program. Większość prac robię Excelu i chciałbym z poziomu Excela wysyłać mail.
Ale jak się nie da makrem to uruchomię go w tle przy starcie systemu.
dzięki za poświęcony czas.
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 09:31

Pamiętaj że w outlooku aby mail się wysłał to i tak musisz mieć skonfigurowane konto.
Jeśli będziesz chciał go podłączyć po staremu (POP3) to pamiętaj aby pozostawić pocztę na serwerze
Konfiguracje dobre jest przeprowadzić z panelu sterowania, a nie z Outlooka, bo tam od razu nawiążesz połączenie i zacznie się kasowanie poczty.
Najlepiej zatem przyjąć konf IMAP, choć wymaga ona lepszego łącza ze względu na każdorazowe synchronizowanie statusów.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez grzesioi » Pn 17.09.2018 10:20

Zastanawiałem się jak to zrobić żeby mi nie pobrało i nie skasowało poczty z serwera. Dodałem konto ręcznie w Outlooku, ale nie dałem mu poprawnej nazwy serwera przychodzącego POP3 tylko wychodzącą wstawiłem prawidłową. I teraz wysyła ale nie pobiera. To tak dla bezpieczeństwa żeby przypadkiem nie pobrać. ;)
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 10:32

grzesioi napisał(a):A da się włączyć makrem ze skrótu i wyłączyć?

Możesz wywołać Outlook kodem Excela i wyłączyć go też, ale nie wiem czy zdąży on wysłać pocztę z synchronizacją konta.

Kod: Zaznacz cały
Dim OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Dim OutMail As Object
Set OutMail = OutApp.GetNamespace("MAPI").GetDefaultFolder(6).Items.Add

'reszt instrukcji czyli co ma sie zawierać w mailu i jakie parametry ma on zawierać
with OutMail
'.htmlbody = ""
'.Subject = ""
'.to = "adres@domena.pl"
'.send 'lub .display jak chcesz to oglądać przed wysłaniem
end with
'wyjście z aplikacji które może potrwać parę/naście sekund
OutApp.Quit
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 10:35

grzesioi napisał(a):Zastanawiałem się jak to zrobić żeby mi nie pobrało i nie skasowało poczty z serwera. Dodałem konto ręcznie w Outlooku, ale nie dałem mu poprawnej nazwy serwera przychodzącego POP3 tylko wychodzącą wstawiłem prawidłową. I teraz wysyła ale nie pobiera. To tak dla bezpieczeństwa żeby przypadkiem nie pobrać. ;)


Dałeś ale jaki typ konta skonfigurowałeś - jak IMAP to nie skasujesz jak POP to tak bo domyślnie jest ustawione kasowanie?
Czyli nie robiłeś to z panelu sterowania jak wspomniałem? #4 na poniższym obrazku

OL_Profile2.png
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez grzesioi » Pn 17.09.2018 11:23

mam pop3. i wiedziałem ze pop kasuje dlatego tak kombinowałem. Nie robiłem tego z Twojej instrukcji bo pocztę konfigurowałem kilka dni temu. A co do wywołania skrótu to potestuję.
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 12:26

No to napisz jak będziesz potrzebował nakierowania.
Powodzenia.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl

Re: Wysyłanie maila przez outlook makrem

Postprzez grzesioi » Pn 17.09.2018 13:19

Jestem po wstępnych testach. Było by tak jak chcę tylko nie wiem jak ustawić treść wiadomości żeby pobierało z arkusza. a nie stały tekst. Jak mam odwołać do Arkusza?


Kod: Zaznacz cały
   
 .htmlbody =    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    .Subject = "jjjjj"
    .To = "adres@domena.pl"


przy takiej konfiguracji mam w treści wiadomości -1, a nie zakres komórek.
grzesioi
 
Posty: 6
Dołączył(a): N 16.09.2018 23:24

Re: Wysyłanie maila przez outlook makrem

Postprzez OShon » Pn 17.09.2018 14:58

Ten kod kompletnie nie ma sensu. Polecenie .Select to nic innego jak "wybierz" czyli faktycznie znaczy weź i zaznacz komórkę o adresie "A1" kursorem.
Kod: Zaznacz cały
 .htmlbody =    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select

Dalej jest jeszcze gorzej bo 2ie następne linijki zaznaczają nam jakiś obszar do prawej i w dół.
Oprócz zaznaczenia nic tam nie ma - nie moz\esz tego przypisać do obiektu mailitem

Jeśli już dobrze być zapisał tego range to i tak no nie ma tak dobrze. Nie możesz przypisać do parametru .htmlbody zakresu komórek :D
Zakres to logika Excela, a wiadomość jest w HTMLu. Musisz więc pobrać w pętli dane z zakresu i zbudować treść htmlową o czym pisałem pow.
Czyli trzeba wpleść w pobrane dane treść języka HTML.
Obrazek
Oskar Shon - MVP Office System/Development 11/19, 3x MCC
Forum moderator: Outlook.pl | ExcelForum.pl | MSDN dział VBA
Zobacz fajne dodatki: Outlooka, Excela, Worda lub PowerPointa
OShon
 
Posty: 9642
Dołączył(a): Cz 19.10.2006 08:31
Lokalizacja: Veracomp SA, VBATools.pl


Powrót do Microsoft Outlook 2007 / 2010 / 2013 / 2016

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 11 gości