Saját véleményem szerint az egyszerűbb kis VBA-kódok használati rangsorában egyértelműen előkelő helyen találhatóak az e-mail küldő makrók, főként vállalati környezetben, ahol esetenként 10-20-100 levelet kell ugyanazzal a szöveggel, más-más címezetteknek elküldeni valamilyen csatolmánnyal - magam is legalább tíz különféle verziójú mailküldő makrót láttam már Outlookra optimalizálva, úgyhogy a mostani posztban egy ilyen megoldás igen leegyszerűsített verzióját fogom bemutatni VBA-ban. Hangsúlyozom előzetesen, hogy rendkívül sokrétű, sokféle módon elkészíthető makrós megoldásról van szó, az Excelben külön felhasználói felületet építhetünk gombokkal, mezőkkel, színes, csilli-villi cuccokkal, én most azonban kizárólag az alapokra fogok koncentrálni, aki elég elhivatott vagy lelkes, az innen már úgyis könnyen tovább tud lépni (megjegyzés: a korábban itt már bemutatott dolgokat fel fogjuk használni, úgyhogy időnként már csak hivatkozom arra a megszerzett tudásunkra).
Első lépésként készítsünk valami hasonló kis táblát az Excelben (vagy amilyen formában, kinézettel akarjuk), innen fogja majd a kis programunk felvenni az értékeket az e-mailhez:
Ezután szépen ALT+F11 lenyomásával sétáljunk át a VBA editorba, ahol lássunk neki az aprócska makró összeállításának, méghozzá kezdjük kapásból azzal, hogy létrehozunk két objektumot, az egyiket az Outlook elindítására, a másikat pedig az E-mail létrehozására, hiszen ezzel férünk majd hozzá az Outlook összes tulajdonságához, metódusaihoz (követve a mintát, amelyet a Microsoft hivatalos leírásában is találjuk):
Az objektumok tehát már megvannak, most töltsük is fel őket, az Outlookprogi objektumunk maga az Outlook program lesz, tehát hozzuk létre:
CreateObject("Outlook.Application")
Értelemszerűen ha mondjuk a WORD-öt akarjuk meghívni, akkor Word.Applicationt használunk.
E-mail objektumunkat pedig ebből következően már az előbb feltöltött Outlookprogi objektum egyik tulajdonságával töltjük fel, azaz a CreateItemmel, hiszen ez fog létrehozni nekünk egy új levelet az Outlook programjában (értelemszerűen egyéb utasításokat is használhatunk más célokra, más programokban is):
Outlookprogi.CreateItem(0)
Miután már megvan az Email nevű objektumunk, használhatjuk annak tulajdonságait is, azaz hozzáférünk a To, a CC vagy akár a csatolmány tulajdonságokhoz is, azaz ezt most úgy képzeljük el, hogy van már egy üresen megnyitott levelünk Outlookban, amelyet fel kell töltenünk tartalommal.
Ahogy megismertük már, a With...End With parancs a közötte felsorolt utasításokat hajtja végre ugyanarra az objektumra vonatkozóan, tehát jelentős mennyiségű gépelést megspórol nekünk, amit pedig itt is fogunk hasznosítani, hiszen Email objektumunk tulajdonságait fogjuk módosítani a következő módon:
Ahogy látható a To értéket az első sheetünk első sorának második oszlopából vesszük fel, CC-t most üresen hagyjuk (de azért idetettem, hiszen ez általában fontos opció szokott lenni), hiszen nem várunk ilyen értéket, BCC-be célszerű valamilyen közös postafiókot, vagy saját e-mail címünket megadnunk, a működés biztosítása érdekében, Subjectbe meghívjuk az első sheetről a megfelelő cellát megint, ahogy tesszük ezt az e-mailünk szövegével is, plusz szépen hozzácsatolunk egy fájlt is a saját meghajtónkról. Fontos, hogy a .Display utasítással nem küldjük még el az e-mailt, hanem megnézhetjük a Send gombra kattintás előtt, ha ezt nem akarjuk megtenni, akkor simán használjunk helyette .Send utasítást és akkor nem is zavar minket semmilyen felugró ablak.
Még egy lépésünk van hátra az alapkódban (ezt mindenképpen célszerű megtenni), ez pedig az, hogy ürítsük ki két változóként deklarált objektumunkat, hogy az újabb használatnál a korábbi adatok már ne zavarjanak be a történetbe, plusz az sem mindig garantált, hogy az applikációt nem változtatjuk meg.
Azaz ez az egész kódunk:
Dobjunk hozzá össze egy apró kis gombot a Ribbonunk Developer füle alatt található Controls szekcióba lévő Insert felhasználásával, majd a gombunk kattintás eseményéhez rendeljük hozzá a fenti makrót, így mostantól már gombkattintsára generálódik az e-mail: