Makro VBA za pošiljanje e-poštnih sporočil iz Excela prek Outlooka

Težava je nastala pri organizaciji razdelitve pisem glede na seznam uporabnikov e-pošte v Excelu. Poleg tega morate v vsakem dopisu navesti nekaj podatkov, ki so individualni za vsakega uporabnika. To funkcijo sem poskušal implementirati s pomočjo makro vba v Excelu, ki pošilja pošto prek Outlookovega poštnega profila, konfiguriranega v računalniku. Spodaj je moja odločitev.

Recimo, da imamo datoteko Excela, ki vsebuje naslednje stolpce:

Uporabniški e-poštni naslov | Polno ime | Zadnji čas spremembe gesla | Stanje računa

V okviru moje naloge mora vsak uporabnik s seznama poslati pismo obrazca:

Tema: Stanje računa v domeni winitpro.ru
Telo pismo: Dragi% Polno ime uporabnika%
Vaš račun v domeni winitpro.ru je% status%
Čas zadnje spremembe gesla:% pwdchange%Namig. Če morate za uporabniške račune pridobiti vrednost enega od uporabniških atributov v aktivnem imeniku, lahko za uporabo uporabniških podatkov iz AD uporabite rešitev iz članka Excel Function..

Ustvari nov zavihek makro: Pogled -> Makroni. Vnesite ime makra send_email in pritisnite gumb Ustvari:

V urejevalnik VBA, ki se odpre, prilepite naslednjo kodo (priložil sem ji vse potrebne komentarje). Za avtomatizacijo pošiljanja črk bom uporabil funkcijo CreateObject ("Outlook.Application"), ki omogoča ustvarjanje in uporabo predmeta aplikacije Outlook v skriptu.

Je pomembno. V računalniku, ki pošilja pisma, mora biti nameščen in konfiguriran e-poštni profil Outlook. Iz tega polja (in naslova) bo poslano.

Pod send_email ()
Dim olapp kot predmet
Dim olMailItm kot predmet
Dim iCounter kot celoten
Dim dest kot varianta
Dim SDest kot niz
"" naslov
strSubj = "Stanje računa v domeni winitpro.ru"
Ob napaki GoTo dbg
ustvari nov objekt tipa Outlook
Nastavite olApp = CreateObject ("Outlook.Application")
Za iCounter = 1 za WorksheetFunction.CountA (Stolpci (1))
'ustvarite nov element (črko) v Outlooku
Nastavi olMailItm = olApp.CreateItem (0)
strBody = ""
useremail = Celice (iCounter, 1) .Value
FullUsername = Celice (iCounter, 2) .Value
Status = Celice (iCounter, 4) .Value
pwdchange = Celice (iCounter, 3) .Value
'' tvorijo telo pisma
strBody = "Draga" & Polno uporabniško ime & vbCrLf
strBody = strBody & "Vaš račun v domeni winitpro.ru" & Status & vbCrLf
strBody = strBody & "Zadnji čas spremembe gesla:" & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
'1 - besedilna oblika pisma, 2 - oblika HTML
olMailItm.Body = strBody
olMailItm.Send
"Naslednjo vrstico lahko uporabite za razhroščevanje besedila pisma, tako da komentirate prejšnjo
'MsgBox strBody
Nastavi olMailItm = Nič
Naslednji iCounter
Nastavi olApp = Nič
dbg:
'prikaz napake, če obstaja
Če je Err.Description "" potem MsgBox Err.Description
Končni pod

To datoteko Excela je treba shraniti s pripono xlsm (Format delovnega zvezka Excela z makro podporo). Če želite začeti distribucijo, izberite ustvarjeni postopek (makro) in kliknite gumb za izvajanje.

Makro zaporedoma bo razvrstil vse vrstice v Excelovem delovnem listu, ustvaril in poslal eno pismo vsakemu e-poštnemu sporočilu s seznama.