VBA makró e-mailek küldéséhez az Excel programból az Outlook segítségével

A probléma az volt, hogy a levelek elosztását az e-mail felhasználók listájának megfelelően szerveztük meg az Excelben. Ezenkívül minden levélben meg kell adnia néhány adatot, amely minden felhasználó számára egyedi. Megpróbáltam megvalósítani ezt a funkciót az Excel vba makrójával, amely leveleket küld a számítógépen konfigurált Outlook e-mail profilon keresztül. Az alábbiakban a döntésem van.

Tegyük fel, hogy van egy Excel fájl, amely a következő oszlopokat tartalmazza:

Felhasználói e-mail | Teljes név | Utolsó jelszócsere ideje | Fiók állapota

A feladatom részeként a listáról minden felhasználónak el kell küldenie egy űrlapot:

téma: Fiók állapota a winitpro.ru domainben
Test levél: Kedves% FullUsername%
Fiókod a winitpro.ru domainben% status%
Utolsó jelszócsere ideje:% pwdchange%tanács. Ha a felhasználói fiókokhoz meg kell szereznie az Active Directory egyik felhasználói attribútumának értékét, akkor használja az Excel Function cikkből származó megoldást, hogy felhasználói adatokat szerezzen az AD-ből.

Hozzon létre egy új makrót: lap kilátás -> makrók. Írja be a makró nevét send_email és nyomja meg a gombot teremt:

A megnyíló VBA-szerkesztőbe illessze be a következő kódot (minden szükséges megjegyzést megadtam). A levelek küldésének automatizálásához a CreateObject funkciót ("Outlook.Application") fogom használni, amely lehetővé teszi egy Outlook alkalmazásobjektum létrehozását és használatát egy szkriptben.

Fontos. A leveleket küldő számítógépen telepíteni kell és konfigurálni kell egy Outlook e-mail profilt. Ebből a mezőből (és a címről) elküldésre kerül.

Sub send_email ()
Dim olapp mint objektum
Dim olMailItm as Object
Dim iCounter mint egész
Dim dest mint változat
Dim SDest mint húrok
'' tárgysor
strSubj = "Fiók állapota a winitpro.ru domainben"
Hiba: GoTo dbg
'hozzon létre egy új, Outlook típusú objektumot
Set olApp = CreateObject ("Outlook.Application")
Az iCounter = 1 esetén a WorksheetFunction.CountA-hoz (1. oszlop)
'új elem (levél) létrehozása az Outlookban
OlMailItm = olApp.CreateItem (0) beállítása
strBody = ""
useremail = cellák (iCounter, 1) .érték
FullUsername = cellák (iCounter, 2) .érték
Állapot = cellák (iCounter, 4) .érték
pwdchange = cellák (iCounter, 3) .érték
A levél törzsét képezik
strBody = "Kedves" & Teljes felhasználónév & vbCrLf
strBody = strBody & "A fiókod a winitpro.ru domainben" & Status & vbCrLf
strBody = strBody & "Utolsó jelszócsere ideje:" & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
'1 - levél szöveges formátuma, 2 - HTML formátum
olMailItm.Body = strBody
olMailItm.Send
'A következő sor felhasználható a levél szövegének hibakeresésére az előző kommentálásával
'MsgBox strBody
Set olMailItm = Semmi
Következő iCounter
Állítsa be az olApp = Semmi értéket
dbg:
'Hiba kijelző, ha van
Ha Err.Description "", akkor az MsgBox Err.Description
Befejezés al

Ezt az Excel fájlt a kiterjesztéssel kell menteni xlsm (Excel munkafüzet formátum makrótámogatással). Az elosztás elindításához válassza ki a létrehozott eljárást (makró), majd kattintson a végrehajtás gombra.

A makró egymást követve rendezi az Excel munkalap összes sorát, generál és elküld egy levelet minden egyes e-mailhez a listából.