Ha már az előző posztban is VBA-ról volt szó, akkor még melegében folytassuk tovább egy VBA-s olvasói kérdés megválaszolásával, amely nagyjából egyetlen felvetésre keresi a választ: hogyan érhetjük el azt, hogy egy rendszeresen legenerált automatikus e-mailünkbe a szöveget egy WORD dokumentumból illesszük be?
Ebben a posztban egy bizonyos megoldást fogok bemutatni, de ahogy általában mindig, most is léteznek más megoldási utak, ráadásul az én javaslatom a maga módján még egyszerű is, hiszen csak konstans szöveget használok, nem fogom megspékelni folyton változó címzettekkel vagy szövegrészekkel.
VBA-editorba lépve (ALT+F11 legyen jó barátunk), szubrutinunkat a szokásoknak megfelelően kezdjük változók deklarálásával, a hivatalos Microsoft leírásnak megfelelően legyen két változónk a meghívott applikációkra:
Dim word As word.Application
Dim outlook As outlook.Application
Majd legyen két másik változónk egy Word-dokumentum és egy Outlook-mail objektumra:
Dim doc As word.Document
Dim mail As outlook.MailItem
Ha ez megvan, akkor állítsuk is be outlook illetve word változónk kezdő értékét a szintén a hivatalos Microsoft leírásból is kileshető CreateObject funkció segítségével, amely lehetővé teszi, hogy egy másik applikációval dolgozzunk:
Set outlook = CreateObject("Outlook.Application")
Set word = CreateObject("Word.Application")
Ahhoz, hogy lássuk is a másik applikáció sessionjét, az adott applikáció Visible tulajdonságát kell True-ra állítanunk:
word.Visible = True
A fentebb deklarált WORD dokumentumváltozó értékének állítsuk be a lementett, levélszöveget tartalmazó WORD fájlunk írásvédettként megnyitott változatát - a Read-Only paramétert a word.Documents.Open metódus paramétereként tudjuk beállítani.
Set doc = word.Documents.Open(Filename:="C:\......docx", ReadOnly:=True)
Most már nagyon közel a feladat vége, ugyanis most milyen feladat vár még ránk? Meg kell fognunk ebből a WORD doksiból a szövegünket, majd be kell raknunk a vágólapra és utána beilleszteni egy Outlookban megnyitott üzenetbe.
Elsőként fogjuk a doc változónkban beállított WORD-dokumentumunkat, majd Content.Select utasítás segítségével jelöljük ki a tartalmát és a hivatalos leírás szerinti Selection.Copy utasítással pakoljuk a vágólapra:
Mi a következő lépés? A WORD tehát már készen áll és be is fejeztük a használatát, most átmegyünk Outlookba, megnyitjuk az e-mailünket, beillesztjük a vágólapról a tartalmat, amit szeretnénk és kész is vagyunk. Elsőként a WORD dokumentumhoz hasonló módon a mail változóba beállított outlook.CreateItem(olMailItem) utasítás segítségével megnyitunk egy e-mailt, amelyet egy With...End With utasítás segítségével formára szabunk:
- megjelenítjük a képernyőn
- beállítunk egy címzettet
- adunk egy tárgyat
- és a legfontosabb lépésként a Word applikációra beállított word változó felhasználásával levelünk Body részét egyenlővé tesszük a WORD-ben kijelölt majd kimásolt tartalommal
Mi van még hátra? A biztonság kedvéért zárjuk be a WORD-dokumentumunkat a Close utasítás segítségével, majd az összes változónkat ürítsük ki:
És itt a kód szövegként is:
Sub Doksilevel()
Dim word As word.Application
Dim doc As word.Document
Dim outlook As outlook.Application
Dim mail As outlook.MailItem
Set outlook = CreateObject("Outlook.Application")
Set word = CreateObject("Word.Application")
word.Visible = True
Set doc = word.Documents.Open(Filename:="C:\........docx", ReadOnly:=True)
doc.Content.Select
word.Selection.Copy
Set mail = outlook.CreateItem(olMailItem)
With mail
.Display
.To = "officeguruhelp@gmail.com"
.Subject = "Megoldás"
.Body = word.Selection
End With
doc.Close
Set doc = Nothing
Set mail = Nothing
Set outlook = Nothing
Set word = Nothing
End Sub
És ezzel adtunk egy választ egy bizonyos kérdésre, de hangsúlyozom, a fenti egy roppantul leegyszerűsített megoldás, hiszen nincsenek benne hibakezelési utasítások, nincsenek változó részek a szövegben és így tovább, de ennek ellenére ahogy mindig, most is remélem, hogy vannak, akiknek ez segítség lehet. És persze tördeljük szépen a kódunkat, ne úgy ömlesszük, ahogy én tettem fentebb.