Wysyłanie e-maila z VBA Excel – Instrukcja

1. Jak wysłać e-mail z VBA Excel?

W tym artykule dowiesz się, w jaki sposób wysyłać e-maile z użyciem VBA w Excelu. VBA ma wiele sposobów na to, wysłać e-mail z Excela przy użyciu Outlooka. W tym artykule przedstawię jeden z nich. W jaki sposób połączyć wysyłkę maili Outlook z VBA w Excelu? Możemy m.in:

  • Wysyłać zwykłe maile do odbiorców np znajdujących się w komórkach arkusza
  • Możemy wysłać aktualnie obsługiwany plik Excel
  • Możemy wysłać dowolny załącznik
  • Możemy wysłać e-mail html bezpośrednio z Excel VBA

Jeśli jesteś zainteresowany wysyłaniem e-maila z programu Access, opisywałem to w tym artykule: Mail z Access VBA. Instrukcja wysyłki wiadomości e-mail z Excel VBA opisana jest w punktach zamieszczonych poniżej.

2. Mail z Excel VBA – składnia i instrukcja

Kod służący do wysyłania e-maila z VBA Excel jest stosunkowo prosty. Jedyne, co powinniśmy zrobić, to upewnić się, że mamy prawidłowo skonfigurowany i działający program Outlook. Jeśli tak jest, VBA wyśle maila. Najprostszy kod do wysłania maila za pomocą VBA z Excel wygląda następująco:

'tomaszkenig.pl
Sub MailExcelVbaOutlook()
    Dim OutApp As Object
    Dim OutMail As Object
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = "example@example.com" 'odbiorca
        .CC = "" 'odbiorca do wiadomości
        .BCC = "" 'odbiorca do ukrytej wiadomości
        .Subject = "Przykładowy temat" 'temat e-maila
        .Body = "Testowa treść wiadomości" ' treść emaila
        '.Attachments.Add ("C:\plik.txt") 'jeśli chcemy dodać załącznik
        .Send   'lub .Display 'informacja o tym, czy chcemy obejrzeć e-mail przed wysłaniem
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Opis kodu, który wypełniamy w edytorze VisualBasic zamieszczam poniżej:

  •  .To – odbiorca wiadomości. Jeśli chcemy do wiadomości dodać więcej niż jednego adresata, wystarczy wprowadzić adresy e-mail oddzielone średnikiem. np .To = „example@example.com;example2@example2.com”
  • .CC  – odbiorca do wiadomości
  • .BCC – odbiorca do ukrytej wiadomości
  • .Subject – temat e-maila, który chcemy wysłać z Outlook
  • .Body – Treść e-maila, którą chcemy wysłać
  • .Attachments.Add („C:\test.txt”)  – opcjonalna ścieżka załącznika, jeśli chcemy wysłać maila z VBA Excel z załącznikiem
  • .Send lub Display  – informacja o tym, czy chcemy obejrzeć e-mail przed wysłaniem. Send wyśle e-mail automatycznie. Display wyświetli e-mail przed wysłaniem.

3. Mail z VBA Excel – wiele linii tekstu

W jaki sposób rozwiązać problem umieszczenia wielu linii tekstu w mailu wysyłanym z VBA? Kolejne linie tekstu należy oddzielić od siebie elementem vbCrLf oraz znakiem „_”. Znak fraza vbCrLf oznacza przejście do kolejnego wiersza. Znak „_” umożliwia w VBA odczyt kodu zapisanego w wielu liniach. Umieszczanie znaku „_” nie jest konieczne, ale znacząco zwiększa nam czytelność kodu VB. Elementy we wszystkich liniach treści maila łączymy operatorem konkatenacji &. Poniżej przykład programu z takim rozwiązaniem:

Excel VBA - e-mail z Excel VBA
Excel VBA – e-mail z Excel VBA
'tomaszkenig.pl
'wiele linii tekstu w treści
Sub MailExcelVbaOutlook2()
    Dim OutApp As Object
    Dim OutMail As Object
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = "example@example.com;example2@example.pl" 'odbiorca
        .CC = "" 'odbiorca do wiadomości
        .BCC = "" 'odbiorca do ukrytej wiadomości
        .Subject = "Przykładowy temat"
        .Body = "Testowa treść wiadomości" & vbCrLf & _
        "Kolejna linia tekstu" & vbCrLf & _
        "Kolejna linia tekstu" ' treść emaila
        '.Attachments.Add ("C:\test.txt") 'jeśli chcemy dodać załącznik
        .Send   'lub .Display 'informacja o tym, czy chcemy obejrzeć e-mail przed wysłaniem
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

4. Jak wysłać e-mail z Outlook automatycznie z użyciem Excel VBA?

Jeśli chcesz wysyłać takie e-maile automatycznie, warto jest do tego wykorzystać kod VBS, który prezentowałem w tym artykule: Automatyczne uruchamianie makra Excel i Access z VBA. Jedyne, co powinieneś zrobić to przygotować pusty plik tekstowy i uzupełnić go poniższym kodem. Uzupełnij w nim jedynie ścieżkę do pliku i nazwę makra. Zapisz plik np jako automat.vbs. Całość możesz podpiąć pod harmonogram zadań. W ten sposób e-maile będą wysyłane automatycznie zgodnie z ustalonym przez Ciebie harmonogramem.

'tomaszkenig.pl
Option Explicit
on error resume next
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("D:\NAZWA_PLIKU_EXCEL.xlsm", 0, True) 'Lokalizacja pliku EXcel
xlApp.Run "Makro1" 'Nazwa makra do uruchomienia
xlBook.Close
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
WScript.Quit
Excel VBA - Wysyłanie e-maila z VBA Excel z wieloma liniami tekstu
Excel VBA – Wysyłanie e-maila z VBA Excel z wieloma liniami tekstu

W ten sposób jak widzisz możesz wysłać każdy e-mail z Excel VBA. Plik z omawianym kodem VBA przykładu zamieszczam pod tym linkiem:

excel_vba_mail_z_excel_vba.xlsm

Źródło: Microsoft

Podobne przykłady praktycznego użycia języka VBA w Excelu zamieszczam na tej stronie: VBA Przykłady. Przy okazji zapraszam do przejścia kursu VBA mojego autorstwa, znajdziesz go pod tym linkiem: VBA

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

17 komentarzy “Wysyłanie e-maila z VBA Excel – Instrukcja”