Makro VBA na odosielanie e-mailov z Excelu prostredníctvom programu Outlook

Vyskytol sa problém usporiadania distribúcie listov podľa zoznamu používateľov e-mailu v Exceli. Navyše v každom liste musíte špecifikovať niektoré údaje, ktoré sú individuálne pre každého používateľa. Túto funkciu som sa pokúsil implementovať pomocou makra vba v programe Excel, ktoré odosiela poštu prostredníctvom poštového profilu programu Outlook nakonfigurovaného v počítači. Nižšie je moje rozhodnutie.

Predpokladajme, že máme súbor programu Excel obsahujúci nasledujúce stĺpce:

Email používateľa Celé meno Čas na zmenu posledného hesla Stav účtu

V rámci mojej úlohy musí každý užívateľ zo zoznamu poslať list formulára:

téma: Stav účtu v doméne winitpro.ru
List tela: Vážený používateľ% FullUsername%
Váš účet v doméne winitpro.ru je% status%
Čas poslednej zmeny hesla:% pwdchange%rada. Ak potrebujete pre užívateľské účty získať hodnotu jedného z atribútov používateľa v službe Active Directory, môžete na získanie používateľských údajov z AD použiť riešenie z článku Excel Function..

Vytvorte nové makro: kartu vyhliadka -> makra. Zadajte názov makra send_email a stlačte tlačidlo vytvoriť:

V editore VBA, ktorý sa otvorí, vložte nasledujúci kód (poskytol som mu všetky potrebné pripomienky). Na automatizáciu odosielania listov použijem funkciu CreateObject („Outlook.Application“), ktorá vám umožňuje vytvárať a používať objekt aplikácie Outlook v skripte.

Je dôležité. V počítači odosielajúcom listy musí byť nainštalovaný a nakonfigurovaný poštový profil programu Outlook. Z tohto poľa (a adresy) sa odošle.

Sub send_email ()
Dim olapp ako objekt
Dim olMailItm ako objekt
Dim iCounter ako celé číslo
Dim dest ako variant
Dim SDest as String
riadok predmetu
strSubj = "Stav účtu v doméne winitpro.ru"
On Error GoTo dbg
'vytvorte nový objekt typu Outlook
Nastaviť olApp = CreateObject („Outlook.Application“)
Pre iCounter = 1 do WorksheetFunction.CountA (stĺpce (1))
'vytvorte novú položku (písmeno) v programe Outlook
Nastaviť olMailItm = olApp.CreateItem (0)
strBody = ""
useremail = Bunky (iCounter, 1). Hodnota
FullUsername = Cells (iCounter, 2) .Value
Stav = Bunky (iCounter, 4). Hodnota
pwdchange = Bunky (iCounter, 3). Hodnota
tvorí časť listu
strBody = "Milý" a celé meno používateľa a vbCrLf
strBody = strBody & „Váš účet v doméne winitpro.ru“ & Stav a vbCrLf
strBody = strBody & "Čas poslednej zmeny hesla:" & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
„1 - textový formát listu, 2 - formát HTML
olMailItm.Body = strBody
olMailItm.Send
'nasledujúci riadok sa dá použiť na ladenie textu listu komentovaním predchádzajúceho
'MsgBox strBody
Nastaviť olMailItm = Nič
Ďalší iCounter
Nastaviť olApp = nič
DBG:
'chybové zobrazenie, ak existuje
Ak Err.Description "" Potom MsgBox Err.Description
Koniec sub

Tento súbor Excel musí byť uložený s príponou xlsm (Formát zošita programu Excel s podporou makra). Ak chcete spustiť distribúciu, vyberte vytvorenú procedúru (makro) a kliknite na tlačidlo Vykonať.

Makro postupne usporiada všetky riadky v pracovnom hárku programu Excel, vygeneruje a odošle jedno písmeno každému e-mailu zo zoznamu.