Makro VBA do wysyłania wiadomości e-mail z programu Excel za pośrednictwem programu Outlook

Powstał problem zorganizowania dystrybucji listów zgodnie z listą użytkowników poczty e-mail w programie Excel. Ponadto w każdej literze należy podać dane, które są indywidualne dla każdego użytkownika. Próbowałem zaimplementować tę funkcję za pomocą makra vba w programie Excel, które wysyła pocztę za pośrednictwem profilu poczty programu Outlook skonfigurowanego na komputerze. Poniżej moja decyzja.

Załóżmy, że mamy plik Excel zawierający następujące kolumny:

E-mail użytkownika | Pełna nazwa | Czas ostatniej zmiany hasła | Status konta

W ramach mojego zadania każdy użytkownik z listy musi wysłać list w formularzu:

Motyw: Status konta w domenie winitpro.ru
Litera ciała: Drogi% FullUsername%
Twoje konto w domenie winitpro.ru ma status% status%
Czas ostatniej zmiany hasła:% pwdchange%Wskazówka. Jeśli dla kont użytkowników musisz uzyskać wartość jednego z atrybutów użytkownika w usłudze Active Directory, możesz użyć rozwiązania z artykułu Funkcja Excela, aby uzyskać dane użytkownika z AD.

Utwórz nowe makro: zakładka Zobacz -> Makra. Wpisz nazwę makra send_email i naciśnij przycisk Utwórz:

W otwartym edytorze VBA wklej następujący kod (podałem mu wszystkie niezbędne komentarze). Aby zautomatyzować wysyłanie listów, użyję funkcji CreateObject („Outlook.Application”), która umożliwia tworzenie i używanie obiektu aplikacji Outlook w skrypcie.

Jest ważne. Profil poczty Outlook musi być zainstalowany i skonfigurowany na komputerze wysyłającym listy. Z tego pola (i adresu) zostanie wysłany.

Sub send_email ()
Dim olapp jako obiekt
Dim olMailItm As Object
Dim iCounter As Integer
Dim dest jako wariant
Dim SDest As String
wiersz tematu
strSubj = "Status konta w domenie winitpro.ru"
W przypadku błędu przejdź do dbg
„utwórz nowy obiekt typu Outlook
Ustaw olApp = CreateObject („Outlook.Application”)
Dla iCounter = 1 To WorksheetFunction.CountA (kolumny (1))
„utwórz nowy element (list) w Outlooku
Ustaw olMailItm = olApp.CreateItem (0)
strBody = ""
useremail = Komórki (iCounter, 1). Wartość
FullUsername = Komórki (iCounter, 2). Wartość
Status = Komórki (iCounter, 4). Wartość
pwdchange = Komórki (iCounter, 3). Wartość
'' tworzą treść listu
strBody = „Drogi” i pełna nazwa użytkownika i vbCrLf
strBody = strBody i „Twoje konto w domenie winitpro.ru” oraz Status i vbCrLf
strBody = strBody & „Czas ostatniej zmiany hasła:” i pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
„1 - format tekstowy listu, 2 - format HTML
olMailItm.Body = strBody
olMailItm.Send
„następnego wiersza można użyć do debugowania tekstu listu, komentując poprzedni
„MsgBox strBody
Ustaw olMailItm = Nic
Następny iCounter
Ustaw olApp = Nic
dbg:
„wyświetlanie błędu, jeśli występuje
Jeśli Err.Description „”, to MsgBox Err.Description
End sub

Ten plik Excel musi zostać zapisany z rozszerzeniem xlsm (Format skoroszytu programu Excel z obsługą makr). Aby rozpocząć dystrybucję, wybierz utworzoną procedurę (makro) i kliknij przycisk wykonania.

Makro będzie kolejno sortować wszystkie wiersze w arkuszu programu Excel, generować i wysyłać jedną literę do każdego e-maila z listy.