Transcript

Univerzitet Crne Gore

Elektrotehnički fakultet - Podgorica

Postdiplomske Studije Primijenjenog Računarstva

Specijalisticki rad

VBA programiranje u MS Outlook-u

Mentor: Kandidat:

Doc. Dr. Miloš Daković Aleksandar Vučeraković

Br.Ind. 75/08

1

Studije Primijenjenog Računarstva

Broj __________

Podgorica, ________ 2009. godine

Kandidat: Aleksandar VučerakovićBroj indeksa: 75/08

VBA programiranje u MS Outlook-u

Datum izdavanja rada: Datum predaje rada:

_____________________ _____________________

Mentor: Kandidat:

_____________________ _____________________Doc. dr Miloš Daković Aleksandar Vučeraković

IZJAVA O SAMOSTALNOM RADU

2

Izjavljujem da sam ovaj specijalistički rad uradio samostalno, uz pomoć literature i mentora.

_____________________Aleksandar Vučeraković

Rad odbranjen dana ____________ 2009. godine pred Komisijom u sastavu:

______________________ (Predsjednik)

______________________ (Mentor)

______________________ (Član)

Sa ocjenom _______ ( ___________ )

Sadržaj:

1. Uvod:.....................................................................5

3

2. VBA programiranje u MS Outlook-u..........................6

3. Objekti Outlook-a od interesa (osobine i metode).....8

3.1 Rad sa aplikacionim objektima...........................10

3.2 Metode za rad sa Outlook objektima..................15

4. Rad sa dogadjajima...............................................21

4.1 Rad sa Aplication-level događajima....................21

4.2 Rad sa Item-level događajima............................22

5. Primjeri Outlook VBA programa.............................25

5.1 Automatsko prosljeđivanje pošte.......................26

5.2 Automatsko prosljeđivanje pristiglih poruka......28

6. Zakljucak..............................................................31

7. Literatura ..……………………………………………………….31

1. Uvod:

Visual Basic je programski jezik visokog nivoa razvijen iz ranije DOS verzije Basic. Basic je skraćenica od Beginners' Allpurpose Symbolic Instruction Code. To je prilično jednostavan programski jezik, lak za učenje i korišćenje.

4

VBA (Visual Basic for Applications) je implementacija programskog jezika Visual Basic i integrisan je u većini programa Microsoft office-a kao i u aplikacijama kao sto su SolidWorks, AutoCad, WordPerfect Office 2002, ArcGIS and Sage Accpac ERP. Ima malih razlika u načinu implementacije VBA u različitim aplikacijama, ali se većinom koristi isti jezik kao sto je VB6 i iste biblioteke.

Reč je o ideji programiranja tzv. integrisanih rješenja, čemu je Microsoft bio rodonačelnik. Formalno, pojam "integrisano rešenje" se odnosi na namensku aplikaciju razvijenu unutar Office-a, a koja koristi mogućnosti jednog ili više programa u jedinstvenom, namenski upravljanom okruženju. Tehnički gledano, takva aplikacija se programira upravljanjem otvorenim objektnim modelom, a može da se realizuje u jeziku Visual Basic for Applications (u komponenti Visual Basic Editor, koji je sastavni deo Office programa)

Koju god Office aplikaciju da koristite, postoje zadaci koje ponavljate desetinama puta, kao što su kucanje ili oblikovanje dela teksta, pokretanje niza komandi menija ili uređivanje dokumenta na određen način. Iste te rezultate možete postići pritiskom na dugme i tako pozivajući određeni programski kod obaviti posao za koji vam je ranije bilo potrebno mnogo više vremena. Možete napraviti aplikaciju kojom ćete pristupiti nekoj drugoj aplikaciji. Iz Excela, na primjer, možemo pristupiti Wordu i tako preuzeti podatke koji će nam trebati za neka izračunavanja u Excel-u.

VBA zamjenjuje i proširuje sposobnosti koje programi u kojima je integrisan VBA pružaju korisnicima i tako omogućava korisnicima da aplikaciju koju koriste više prilagode sebi i svojim potrebama, pišući programske kodove, koji će im u mnogome olakšati posao koji obavljaju. Možemo da ubrzamo i automatizujemo sve poslove koji se ponavljaju u Word-u, Excel-u, Access-u i Outlook-u. Takodje možemo da prilagođavamo menije, palete alatki i okvira za dijalog i tako učinimo da Office izgleda onako kako mi želimo.

U daljem izlaganju ću se usredsrijediti na VBA programiranje u MS Outlook-u.

2. VBA programiranje u MS Outlook-u

Za istraživanje i testiranja koristio sam Microsoft Office Outlook 2003. Microsoft Office Outlook 2003 nudi integrisano rješenje za upravljanje i organizovanje e-mail poruka, rasporeda, zadataka, kontakata i drugih informacija, bolju organizaciju rada kao i poboljšanu komunikaciju i to sve sa jednog mjesta.

Visual Basic for Applications vam omogućava da preuzmete punu kontrolu nad Outlook-ovim objektnim modelom uključujući širok spektar primjena na nivou događaja.

5

Svi VBA kodovi su sadržani u projektu. Projekat je povezan sa određenim korisnikom tako da svi korisnici koji pokrenu Outlook mogu da ga podese za svoje potrebe. Projekat može da sadrži kod modula i „user form“ modula s’ tim sto treba znati da su „user form“ moduli i Outlook forme različite.

Veoma je bitno napomenuti da za razliku od ostalih Office-ovih aplikacija MS Outlook nema „macro recorder“.

Kao i većina Office-ovih programa i Outlook uključuje Visual Basic Editor gdje možete napisati sopstveni kod za automatizaciju Outlook-a. Korišćenjem ovog editora možete napraviti module za obavljanje složenih zadataka koji se ponavljaju tako što ćete ih automatizovati, a takodje možete napisati kod koji odgovara na Outlook događaje.

Slika 2.1: VB editor

VB editor možemo koristiti za kreiranje, brisanje i editovanje modula kao i za kreiranje „user form“ modula. Ovaj editor omogućava moćan skup alata uključujući i ugrađen Object Browser i debuger koji sluzi da olakša razvijanje i rješavanje problema programskog koda. Vb editor u Outlook-u takođe možete koristiti da razvijete i testirate kod koji potom možete kopirati u samostalnoj VB aplikaciji ili VBA aplikaciji u nekoj drugoj Office-ovoj aplikaciji.

Možete eksportovati kreirani modul u fajl koji kasnije možete dati drugim korisnicima, a oni ga vrlo lako implementirati u svoj Outlook VBA project.

6

- Kreiranje Outlook makroa

U „tools“ meniju odaberemo opciju „macro“, a potom Visual Basic Editor (ovo se može postići i prečicom <Alt>+F11) i otvara nam se project prozor kao na „slici 2.1“. Da dodamo novi modul u koji ćemo da pišemo kod odaberemo opciju insert/module i dobijamo prozor kao na „slici 2.2“.

Slika 2.2: VB editor

Na „slici 2.2“ vidimo radno okruženje za pisanje koda u VB editoru. Tu razlikujemo tri prozora i to:

Project Explorer koji nam služi za navigaciju i napravljen je kao stablo kroz koje se možemo vrlo lako kretati i odabirati module ili forme koje želimo da modifikujemo ili upotrijebimo.

Properties prozor koji nam omogućava da mijenjamo svojstva objekta kojeg možemo odabrati iz padajućeg menija Project prozora koji se nalazi na vrhu tog prozora.

Code prozor nam služi za ispis samog koda. Kada završimo sa ispisom koda možemo ga pokrenuti opcijom „run

7

Code Window

Properties Window

Project Explorer

macro“ iz palete run, a isti efekat postižemo i pritiskom na taster F5 sa tastature.

Poslije ovog kratkog opisa VBA u MS Outlook-u i postupka kreiranja samog koda možemo preći na objektni model Outlook-a.

3. Objekti Outlook-a od interesa (osobine i metode)

Outlook-ov objektni model predstavlja mnogo objekata sa njihovim osobinama, kolekcijama i metodama. Aplikacioni objekti, koji su glavni objekti u objeknom modelu, predstavljaju cijelu Outlook-ovu aplikaciju i dozvoljavaju pristup drugim objektima u Outlook-ovoj hijerarhiji.

Do Outlook-ovog modela objekata možemo doći na sljedeći način: pokrenemo Outlook i pritisnemo <Alt>+F11 da pokrenemo VB editor. Zatim iz menija izaberemo Help/Microsoft Office Help i u Search ukucamo „Outlook object model“ a zatim iz rezultata pretrage odaberemo Outlook object model i dobijemo grafički prikaz Outlook-vog modela objekata koji je prikazan na slici 3.1.

Kada pogledate Outlook object model na slici 3.1 vidjećete da su neki okviri obojani u žuto, a neki u plavo. Žuti okviri predstavljaju objekte koji su organizovani u kolekcijama, dok plavi objekti nemaju kolekcije.

Klikom na bilo koji objekat dobijamo detalje o njemu, uključujući šemu koja prikazuje vezane objekte u objektnom modelu (slika 3.2-prikaz „folder collection“, koja sadrži detalje folder objekata dostupnih u Outlook-u).

8

Slika 3.1: Prikaz dijela Outlook Object Model-a

Slika 3.2: Folder collection

9

Outlook sadrži mnoštvo objekata koji se mogu napraviti, dozvoljavajući vam da dosegnete neke objekte iz objektog modela, bez eksplicitnog prolaska kroz aplikacione objekte. Evo nekih glavnih takvih objekata:

- Explorers kolekcija sadrži explorer objekat za svaki prozor koji prikazuje sadržaj foldera

- Inspectors kolekcija sadrži inspektor objekat za svaki prozor koji se otvara prikazujući neku stavku Outlook-a

- COMAddIns kolekcija sadrži COMAddIn objekat za svaki COM (Component Object Model)

- Reminders kolekcija sadrži Reminder objekat za svaki podsjetnik

Većina istaknutih objekata je u Outlook-ovom korisničkom interfejsu predstavljena u VBA preko stavki čija imena odslikavaju tip objekta:

- MailItem objekat predstavlja stavku maila

- ContactItem objekat predstavlja kontakt

- TaskItem objekat predstavlja zadatak

- AppointmentItem objekat predstavlja sastanak

- NotelItem objekat predstavlja napomenu

3.1 Rad sa aplikacionim objektima

- NameSpace objekat

Slika 3.1.1: NameSpace objekat

10

Da bi se izvršile brojne akcije nad Outlook-ovim stavkama kao što su e-mail poruke, zadaci, kontakti koristi se GetNameSpace metoda aplikacionog objekta. Sintaksa je sledeća:

expression.GetNameSpace(Type)

Expression(izraz) je potreban izraz koji vraća aplikacioni objekat. Type je argument tipa string koji specificira tip namespace-a koji želite vratiti.

Da bi kreirali novi folder koristimo Add metodu. Sintaksa je sljedeća:

expression.Add (Name, Type)

Expression(izraz) je potreban izraz koji vraća Folder kolekciju. Name je potreban argument tipa string koji specificira ime preko kojeg pristupamo folderu. Type je opcioni argument tipa long koji se koristi da se specificira tip foldera koji kreiramo: olFolderCalendar, olFolderContacts, olFolderDrafts, olFolderInbox, olFolderJournal, olFolderNotes, ili olFolderTasks. Ako izostavimo type kreiraće se folder istog tipa kao i folder u koji ga kreiramo. Kreiraćemo folder Moje Stavke u Tasks folderu:

Application.GetNamespace(”MAPI”).GetDefaultFolder(olFolderTasks).Folders.Add Name:=”Moje Stavke”, Type:=olFolderTasks

Slika 3.1.2: Lista foldera sadržanih u NameSpace objektu

Da izbrišemo folder koristimo delete metodu sa odgovarajućim MAPIFolder objektom:

Application.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks) .Folders("Moje stavke").Delete

11

- Rad sa Inspectors i Explorers objektima

VBA koristi dva najveća Outlook objekta koje većina korisnika ne može da prepozna iz običnog rada putem Outlook korisničkog interfejsa. Ta dva objekta su:

-Inspector - Objekat koji prezentuje prozor prikazujući neku Outlook stavku kao što je e-mail poruka.

Slika 3.1.3: Inspectors object

-Explorer-Objekat prezentuje prozor koji prikazuje sadržaj objekta.

Slika 3.1.4: Explorers object-Otvaranje Inspector prozora

12

Da bi otvorili Inspector prozor za objekat, koristimo Display metod inspektor objekta. Sledeći iskaz prikazuje inspector prozor za objekat koji je referenciran pomocu objektne varijable Item:

myItem.Display

-Vraćanje inspektora povezanog sa stavkom

Da bi vratili inspector povezan sa stavkom koristimo GetInspector odgovarajućeg objekta. Sljedeći primjer vraća inspector za stavku identifikovanu pomoću objektne varijable Item:

myItem.GetInspector

-Vraćanje aktivnog prozora, inspektora ili eksplorera

Za razliku od Word-a, Excel-a, PowerPoint-a Outlook nema ActiveWindow objekat koji prezentuje aktivni prozor. Znači Outlook Aplikacioni objektat ima ActiveWindow metodu koja vraća vrhovni Outlook prozor, ako uopšte postoji, a ako ga nema ne vraća ništa. Ovaj prozor može biti Inspector object ili Explorer object.

ActiveExplorer metod aplikacionog objekta vraća aktivni explorer i ActiveInspector metod aplikacionog objekta vraća aktivni inspector.

Da bi odredili koji je prozor aktivan koristimo TypeName funkciju.

Sljedeći primjer predstavlja msg box koji prikazuje i sadrži koji je tip prozora aktivan sve dok ima aktivnog prozora.

If Not TypeName(ActiveWindow) = "Nothing" ThenMsgBox "An " & TypeName(ActiveWindow) & " Prozor je aktivan“

End If

-Rad sa Active Inspector

U mnogim procedurama mora se odrediti koji je inspektor najvećeg nivoa u Outlook aplikaciji, da bi moglo da se radi sa tim inspektorom, ili da bi se taj inspektor mogao vratiti na poziciju najvećeg nivoa nakon završetka rada sa procedurom, koja koristi taj inspektor.

Da vratimo inspektor najvećeg nivoa koristimo ActiveInspector metod aplikacionog objekta: Application.ActiveInspector.WindowState = olMaximized

13

U Outlook-u nema uvijek aktivnog inspektora pa bi dobro bilo da provjerimo ima li ga prije nego počnemo da radimo sa njim. Da bi to uradili provjerićemo da TypeName fnkcija ne vraća Nothing kada startujemo ActiveInspector metodu aplikacionog objekta.

If TypeName(Application.ActiveInspector) = "Nothing" ThenMsgBox "Nema otvorene stavke."

EndEnd If

-Kreiranje stavke

Za kreiranje stavke u Outlook-u koristi se CreateItem metod ili CreateItemFromTemplate metod aplikacionog objekta. Pomoću CreateItem metode kreira se podrazumijevana stavka dok se pomoću metode CreateItemFromTemplate kreira stavka bazirana na šablonu (template) koji sami specificiramo.

Korišćenje CreateItem metode za kreiranje podrazumijevane stavkeSintaksa:

expression.CreateItem(ItemType)

Expression je potreban izraz koji vraća aplikacioni objekat.ItemType je potreban argument koji specificira tip stavke koja se kreira i može biti: olAppointmentItem, olContactItem, olDistributionListItem, olJournalItem, olMailItem, olNoteItem, olPostItem ili olTaskItem.

Primjer koji slijedi prikazuje postupak kreiranja nove e-mail poruke koja uključuje primaoca, subject i tijelo poruke.

Dim myMessage As MailItemSet myMessage = Application.CreateItem(ItemType:=olMailItem)With myMessage

.To = "[email protected]"

.Subject = "Probna poruka"

.Body = "Ovo je probna poruka."

.DisplayEnd With

Korišćenje CreateItemFromTemplate metode za kreiranje stavke po šablonuSintaksa:

expression.CreateItemFromTemplate(TemplatePath, InFolder)Expression je potreban izraz koji vraća aplikacioni objekat.

14

TemplatePath je potreban argument tipa string koji specificira putanju (path) i ime fajla šablona na osnovu kojeg se pravi nova stavka.InFolder je opcioni argument tipa variant koji koristimo da bi odredili folder u koji će se smjestiti kreirana stavka. Ako izostavimo ovaj argument stavka će se kreirati u podrazumijevani folder za taj tip stavke.

Primjer koji slijedi kreira novu napomenu baziranu na šablonu Quick Note.oft koji je smješten u \Application Data\Microsoft\Templates folderu zajedno sa korisnikovim korisničkim profilom.

Dim myNoteItem As NoteItemSet myNoteItem = Application.CreateItemFromTemplate

("C:\Documents and Settings\Jana Cook\Application Data\" & "Microsoft\Templates\Napomena.oft")

myNoteItem.Display

-Zatvaranje Outlook-a

Za zatvaranje Outlook-a koristi se quit metoda aplikacionog objekta. Ova metoda nema argumenata.

Application.Quit

3.2 Metode za rad sa Outlook objektima

-Upotreba Display metode

Da bi se otvorila stavka u Inspector prozoru koristi se Display metoda.

Sintaksa:

expression.Display(Modal)

Expression je potreban izraz koji vraća tip objekta koji želimo da se prikaže.Modal je opcioni argument tipa Variant kojem možete dodijeliti vrijednost True ako želimo da prozor bude modalan, a ko ne želimo onda mu dodijelimo vrijednost False ili ga izostavimo da bi mu se dodijelila podrazumijevana vrijednost.

-Upotreba Close metode

Da zatvorimo prozor koristimo Close metodu.

15

Sintaksa:

expression.Close(SaveMode)

Expression je potreban izraz koji vraća objekat kojeg želimo da zatvorimo.SaveMode je potreban argument koji može da specifikuje bilo šta od sledećeg: snimanje promjena (olSave), odbacivanje promjena (ol Discard) ili može ponuditi korisniku da odluči da li će da snimi promjene (olPromtFor Save)

Sljedeći primjer nam pokazuje kako se zatvara aktivni Inspector i snimaju promjene njegovog sadržaja:

ActiveInspector.Close SaveMode:=olSave

-Upotreba Delete metode

Da bi izbrisali stavku koristi se Delete metoda. Ova metoda je bez argumenata. Sledeći primjer prikazuje kako se brišu stavke iz Contact foldera koje su indeksirane brojem 1.

Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts) .Items(1).Delete

-Upotreba PrintOut metode

Da bi odštampali stavku koristimo PrintOut metodu. Ova metoda nema argumenata. Sledeći primjer nam pokazuje kako se štampa stavka iz inbox-a koja je indeksirana brojem 1.

Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox) .Items(1).PrintOut

-Upotreba Save metode

Da bi snimili stavku koristimo Save metodu. Ni ova metoda nema argumenata. Sljedećim primjerom kreiramo novi zadatak sa subject-om, početnim datumom, datumom dostave, isključujemo podsjetnik za zadatak i snimamo ga:

Dim myTask As TaskItemSet myTask = Application.CreateItem(ItemType:=olTaskItem)With myTask

.Subject = "Podešavanje rasporeda sastanaka"

.StartDate = Date

16

.DueDate = Date + 7

.ReminderSet = False

.SaveEnd With

-Upotreba SaveAs metode

Da snimimo stavku kao poseban fajl koristimo SaveAs metodu.Sintaksa:

expression.SaveAs(Path, Type)

Expression je potreban izraz koji vraća objekat koji snimamo.Path je potreban argument tipa string koji specificira putanju i ime fajla u koji snimamo.Type je opcioni argument tipa Variant koji se upotrebljava da se kontroliše tip fajla koji se koristi za fajl. Tipovi fajlova mogu biti sljedeći:

olHTML Html fajlolMSG Outlook message format (.msg file)olRTF Rich text formatolTemplate TemplateolDoc Word document format (mail msg using WordMail)olTXT Text fileolVCal vCal fileolVCard vCard fileolICal iCal fileolMSGUnicode

Outlook Unicode message format (.msg file)

Tbela 3.2.1

Sljedeći primjer čuva poruku otvorenu u aktivnom inspector-u. Ako IsWordMail ActiveInspector objekta vraća True primjer čuva poruku kao .doc fajl, a ako vraća False primjer čuva poruku kao .rtf fajl. Ako nema aktivnog Inspector prozora primjer vraća poruku naznačavajući problem korisniku.

If TypeName(ActiveInspector) = "Nothing" ThenMsgBox "Ovaj makro se ne može pokrenuti " &

"Nema aktivnog prozora.", vbOKOnly, "Makro se ne može pokrenuti"End

ElseIf ActiveInspector.IsWordMail Then

17

ActiveInspector.CurrentItem.SaveAs "c:\keep\poruka.doc"Else

ActiveInspector.CurrentItem.SaveAs "c:\keep\poruka.rtf"End If

End If

-Rad sa porukama

Svojstva e-mail poruka u MS Outlook-u su sledeća:

1. To – Svojstvo preko kojeg unosimo primaoce poruke.2. CC – Primaoci kojima šaljemo kopiju poruke3. BCC – Primaoci kojima šaljemo kopiju poruke i koji ne mogu

videti primaoce iz To i CC4. Subject – Naslov poruke5. Body – Tijelo poruke za unošenje teksta6. Body format – Tip formata poruke7. Importance - Važnost poruke

Da bi uopšte mogli da radimo sa sadržajem poruke prvo je moramo kreirati i to se radi pomoću metode CreateItem aplikacionog objekta i specificira se olMailItem za ItemType argument. Primjer:

Dim myMessage As MailItemSet myMessage = Application.CreateItem(ItemType:=olMailItem)With myMessage

.To = "[email protected]"

.Subject = "Priprema za pregled"

.Body = "Molimo vas da dođete sjutra i ostanete par minuta" & "raspravljajući o materijalima koje je potrebno

pregledati.".BodyFormat = olFormatHTML.Importance = olImportanceHigh.Send

End WithBody format: ormatPlain, olFormatRichText i olFormatHTMLImportance: olImportance(High, Normal, Low)-Dodavanje attachment-a poruci

Da bi dodali attachment poruci koristimo metodu Add sa attachment kolekcijom.

Sintaksa:

expression.Add(Source, Type, Position, DisplayName)

Expression: potreban izraz koji vraća attachment kolekciju.

18

Sourse: potreban argument tipa string koji vraća putanju i ime fajla koji je attachment.Type: opcioni argument tipa string koji specificira tip attachment-a.Position: opcioni argument tipa string koji se koristi da se specificira karakter na koji će se pozicionirati attachment. Broj 0 da se sakrije attachment, 1 da se postavi na početku poruke, veći brojevi za tačnu poziciju karaktera u poruci, a ako stavimo broj veći od broja karaktera u poruci attachment se postavlja na kraju poruke.DisplayName: opcioni argument tipa string koji se specificira da kontroliše ime koje se prikazuje za attachment u poruci.

-Upotreba Send metoda

Da bi poslali poruku koristimo Send metodu koja nema argumenata.

Sintaksa:

myMessage.Send

-Rad sa kalendarom

Da bi se kreirala nova stavka kalendara koristi se CreateItem metoda aplikacionog objekta i specificira olAppointmentItem za ItemType argument.

Primjer:

Dim myAppointment As AppointmentItemSet myAppointment = Application.CreateItem(ItemType:=olAppointmentItem)

Da bi radili sa sadržajem stavki kalendara moramo poznavati određena svojstva. To su: Subject, Body, Start, End, BisyStatus, Catagories, ReminderSet, ReminderMitutesBe, foreStart.

-Rad sa zadacima

Da bi kreirali zadatak koristimo CreateItem metod aplikacionog objekta i specificiramo olTaskItem za ItemType argument.

Primjer:

Dim myTask As TaskItemSet myTask = Application.CreateItem(ItemType:=olTaskItem)

-Pretraga stavki

19

Da bi radili pretragu u Outlook-u koristimo AdvansedSearch metodu.

Sintaksa:

expression.AdvancedSearch(Scope, Filter, SearchSubFolders, Tag)

Expression: potreban argument koji vraća aplikacioni objekat.Scope: potreban argument tipa string koji specificira cilj pretrage (koju stavku tražimo).Filter: opcioni argument tipa Variant koji specificira filter pretrage. Mora se koristiti osim ako hoćete da vidite sve stavke koje sadrže datu stavku koju tražimo.SearchSubFolders: opcioni argument tipa Variant čiju vrijednost možemo postaviti na True ako hoćemo da pretražimo sve podfoldere foldera koji smo naveli u Scope, a možemo mu zadati i vrijednost False ako ćemo da vršimo pretragu samo u zadatom folderu. Podrazumijevana vrijednost je False.Tag: opcioni argument tipa variant koji se može iskoristiti da se specificira ime za pretragu koju smo definisali. Ako kreiramo ime možemo pozvati pretragu ponovo.

4. Rad sa dogadjajima

Outlook ima dvije vrste događaja i to: aplication-level događaje i Item-level događaje koje moramo koristiti da bi automatizovali Outlook tako da reaguje na događaje.

4.1 Rad sa Aplication-level događajima

Aplication-level događaji su više usresređeni na Outlook aplikacije nego na individualne stavke, za razliku od Item-level događaja.

Aplcation-level događaji su lakši za korišćenje zato što je aplikacioni objekat vrhovni objekat i uvijek je dostupan u Outlook-u.

20

-Start up događaj

Javlja se pri startovanju Outlook-a i nema argumenata. On nam osigurava da je Outlook dobro konfigurisan prije nego korisnik počne sa radom.

Private Sub Application_Startup()Dim myNoteItem As NoteItemSet myNoteItem = Application.CreateItem(ItemType:=olNoteItem)myNoteItem.Body = "Startujte novo vrijeme kartice za danas."myNoteItem.DisplayEnd Sub

-Quit događaj

Javlja se pri zatvaranju Outlook-a. Kada se ovaj događaj izvrši prozori su zatvoreni i sve globalne promenljive su oslobođene pa je malo toga ostalo što bi se moglo uraditi sa ovim događajem.

-ItemSend događaj

Javlja se prilikom slanja stavke.Sintaksa:

Sub expression ItemSend(ByVal Item As Object, Cancel As Boolean)

Expression: potreban izraz koji vraća aplikacioni objekat.Item: potreban argument koji specificira stavku koja se šalje.Cancel: opcioni argument tipa boolean koji možemo postaviti na False da bi spriječili slanje stavke

4.2 Rad sa Item-level događajima

Sa Item-level događajima u Outlook-u možete upravljati na dva načina.

-Deklarisanjem događaja u klasnom modulu i pokretanjem procedure.

-Kreiranjem VB skript koda kojeg postavljamo u formi koju koristi stavka.

-Deklaracija Objektnih promenljivih i pokretanje događaja

Da bi se deklarisao objekat i pokrenuo događaj treba ispratiti sljedeće korake:

21

1. Treba odlučiti koju ćemo klasu modula koristiti pomoću sljedećih metoda:

-Za ThisOutlookSession modul – dupli klik na Project1 koji prezentuje Outlook VBA projekat, zatim dupli klik na MS Office stavku i dupli klik na ThisOutlookSession

-Kreiranje modula pomoću desnog klika na project explorer pa insert/module i automatski se otvara Code prozor za klasu.

-Otvaranje postojećeg modula duplim klikom na njega u project exploreru

2. U deklaracionom dijelu na početku modula deklarišemo promenljive koje reprezentuju objekat. Sljedeći primjer kreira javnu promenljivu my PublicContactItem:

Public WithEvents myPublicContactItem As ContactItem

3. Pokretanje objektne varijable postavljajući je da reprezentuje odgovarajući objekat. Sljedeći primjer postavlja myPublicContactItem da reprezentuje prvu stavku u podrazumijevanom Contact folderu.

Set myPublicContactItem = Application.GetNamespace("MAPI") .GetDefaultFolder(olFolderContacts).Items(1)

Jednom kada pokrenemo objektnu varijablu procedura će se startovati nakon što se desi događaj.

-Događaji koji se mogu primijeniti na sve stavke poruke:

AttachmentAdd – aktivira se nakon što je attachment dodat AttachmentRead – aktivira se kada korisnik otvori e-mail i

pročita attachment BeforeAttachmentSave – aktivira se kada korinik izabere da

snimi attachment ali prije nego što se komanda izvši BeforeCheckNames – aktivira se prije nego što Outlook

provjeri primaoce poruke koja se šalje BeforeDelete – aktivira se prije nego što se stavka izbriše Close- aktivira se kada se inspector zatvori, ali prije izvršenja

akcije Forward – aktivira se kada korisnik proslijedi stavku Open – aktivira se kada se stavka otvori u inspector-u Read – aktivira se kada je stavka otvorena za editovanje Reply – aktivira se kada korisnik inicira reply komandu za

22

stavku Send – aktivira se kada je reply komanda izdata, ali prije

nego se stavka pošalje Write – akivira se kada se stavka snimi

Sintaksa za BeforeDelete događaj:

Sub expression_BeforeDelete(ByVal Item As Object, Cancel As Boolean)

-Dogadjaji koji se primenjuju na Explorers, Inspectors i Views

Događaji za Explorers:

BeforeFolderSwitch – aktivira se prije nego explorer prikaže novi folder

BeforeItemCopy – aktivira se kada korisnik izda copy komandu, ali prije njenog izvršenja

BeforeItemCut – aktivira se kad je stavka već „cutovana“ BeforeItemPaste – aktivira se prije nego se stavka iskopira FolderSwitch - aktivira se pošto explorer prikaže folder ViewSwitch – aktivira se kada se promijeni pogled u explorer

prozoru NewExplorer – aktivira se kada se otvori novi explorer

prozor

Događaji za Explorers i Inspectors:

Activate – aktivira se kada se aktivira explorer ili inspector prozor

Deactivate – aktivira se kada se deaktivira explorer ili inspector prozor

BeforeMaximize - aktivira se kada korisnik maksimizujeexplorer ili inspector ali prije izvršenja akcije

BeforeMinimize - aktivira se kada korisnik minimizuje explorer ili inspector ali prije izvršenja akcije

BeforeMove – aktivira se kada korisnik pomjeri explorer ili inspector prozor ali prije nego se akcija realizuje

BeforeSize – aktivira se prije nego se promijeni velicina explorera ili inspectora

Događaji za Inspectors:

NewInspector – aktivira se kada se otvori novi inspectorprozor

23

Događaji za Views

ViewAdd – aktivira se kada je novi „pogled“ dodat u Views kolekciji

ViewRemove – aktivira se kada je „pogled“ uklonjen iz Viewskolekcije

-Događaji koji se primenjuju na Folderima

FolderAdd –aktivira se kada se novi folder doda folder kolekciji

FolderChange – Aktivira se kada se folder izmijeni FolderRemove – aktivira se kada se folder izbriše

-Događaji koji se primenjuju na stavkama

ItemAdd – aktivira se kada se jedna ili više stavki doda kolekciji, ali ne mnogo stavki od jednom

ItemChange – aktivira se kada se stavka izmijeni ItemRemove – aktivira se kada se stavka izbriše iz kolekcije,

ali ne kada se izbriše 16 ili više stavki od jednom

-Događaji koji se primenjuju na podsjetnik

BeforeReminderShow – aktivira se prije nego što se prikaže podsjetnikov dialog box

ReminderAdd – aktivira se nakon što se doda novi podsjetnik

ReminderChange – aktivira se nakon što se podsjetnik izmijeni

ReminderFire – aktivira se prije nego se podsjetnik izvrši ReminderRemove – aktivira se prije nego se podsjetnik

ukloni iz Reminders kolekcije

-Događaji koji se primenjuju na sinhronizaciju

SyncStart – aktivira se kada Outlook započne sinhronizaciju korisničkog foldera

SyncEnd – aktivira se nakon što se izvrši sinhronizacija OnError – aktivira se nakon što se desi greška tokom

sinhronizacije

24

5. Primjeri Outlook VBA programa

U ovom poglavlju nalaze se dva vrlo korisna VBA koda koje sam uradio za potrebe svih korisnika Outlooka bilo da ga koriste u privatne ili poslovne svrhe.

Prvi kod, automatsko prosljeđivanje pošte, koji objašnjen u poglavlju 5.1 služi za back up svih poslatih e-mail-ova na jednu e-mail adresu, tako što ćemo sve e-mailove koje smo poslali imati na nekom e-mail serveru bilo da je to G-mail koji sam ja koristio ili neki drugi. Taj kod rješava problem koji može nastati ako koristimo Outlook na dva ili više različitih računara (na primjer kod kuće i na poslu...) pa se poslati mailovi čuvaju u folderima računara sa kojih su poslati. Problem može nastati, ako smo na primjer kod kuće i treba nam neka poruka koju smo poslali sa posla, a ona se nalazi na računaru na poslu. Ovim kodom sam riješio taj problem i sada u svakom trenutku imate sve poslate poruke na jednom mjestu!

Drugi kod, automatski odgovor na pristigle poruke, koji je objašnjen u poglavlju 5.2, automatizuje Outlook tako sto će na svaku e-mail poruku sa tačno određenim subjectom automatski odgovoriti porukom odgovarajućeg sadržaja.

5.1 Automatsko prosljeđivanje pošte

Kod:Private Sub Application_ItemSend(ByVal MyMail As Object, Status As Boolean) Dim objEmails As Recipient Dim intRes As Integer Dim strBcc As String strBcc = "[email protected]"

On Error Resume Next Set objEmails = MyMail.Recipients.Add(strBcc) objEmails.Type = olBCC If Not objEmails.Resolve Then intRes = MsgBox("Bcc adresa ne moze biti razriješena. Da li i dalje želite da isporucite poruku?", vbYesNo + vbDefaultButton1, "Bcc primalac ne može biti razriješen") If intRes = vbNo Then Status = True End If End If

25

Set objEmails = NothingEnd Sub

Ovaj kod treba iskucati u VB editoru Outlooka u Project1/Microsoft office Outlook Objects/ThisOutlookSession.

Iz prvog padajaućeg menija biramo application, a iz drugog ItemSend i iskucamo kod (slika 5.1.1.)

Slika 5.1.1: Kod za automatsko prosljeđivanje pošte

Sada je samo ostalo da šaljemo poruke. Ja sam u kodu za Bcc adresu na koju će se prosljeđivati sve poslate poruke postavio [email protected]. Kada pošaljemo poruku možemo je otvoriti i vidjeti da je u zaglavlju poruke u polju Bcc naznačena adresa [email protected] (slika 5.1.2). Na kraju možemo provjeriti na G-mail serveru da li je poruka stvarno stigla.

26

Slika 5.1.2: Zaglavlje poruke

5.2 Automatski odgovor na pristigle poruke

Kod:Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)Dim mai As ObjectDim newMail As MailItemDim intInitial As Integer, intFinal As IntegerDim strEntryId As StringDim intLength As IntegerDim myNameSpace As Outlook.NameSpaceDim myInbox As Outlook.MAPIFolderDim myDestFolder As Outlook.MAPIFolderDim myDestFolder2 As Outlook.MAPIFolderDim strSubject, strTemp As StringSet myNameSpace = Application.GetNamespace("MAPI")Set myInbox = myNameSpace.GetDefaultFolder(6) intInitial = 1 intLength = Len(EntryIDCollection) intFinal = InStr(intInitial, EntryIDCollection, ",") Do While intFinal <> 0 strEntryId = Strings.Mid(EntryIDCollection, intInitial, (intFinal - intInitial)) Set mai = Application.Session.GetItemFromID(strEntryId) If mai.Subject = "Prijava za upis" Then Set newMail = Application.CreateItem(olMailItem) newMail.Subject = "RE: Prijava" newMail.Body = "Vasa prijava ce biti razmotrena. Dobicete odgovor najkasnije za sedam dana." newMail.To = mai.SenderEmailAddress newMail.Send End If intInitial = intFinal + 1 intFinal = InStr(intInitial, EntryIDCollection, ",") Loop strEntryId = Strings.Mid(EntryIDCollection, intInitial, (intLength - intInitial) + 1)

27

Set mai = Application.Session.GetItemFromID(strEntryId) If mai.Subject = "Prijava za upis" Then Set newMail = Application.CreateItem(olMailItem) newMail.Subject = "RE: Prijava" newMail.Body = "Vasa prijava ce biti razmotrena. Dobicete odgovor najkasnije za sedam dana." newMail.To = mai.SenderEmailAddress newMail.Send End IfEnd Sub

Ovaj kod treba iskucati u VB editoru Outlooka u Project1/Microsoft office Outlook Objects/ThisOutlookSession.

Iz prvog padajaućeg menija biramo application, a iz drugog NewMailEx i iskucamo kod.

Kod sam uradio tako da kada stigne e-mail poruka sa subjectom „Prijava za upis“ (slika 5.2.1.) Outlook automatski odgovori porukom „Vaša prijava će biti razmotrena. Dobićete odgovor najkasnije za sedam dana.“ i Subjectom: „RE: Prijava“. (slika 5.2.2.) Veoma koristan kod, posebno za kompanije kojima stiže mnogo prijava, pa vrijeme koje bi utrošili na odgovor na poruke mogu bolje iskoristiti. Kod se može iskoristiti i primijeniti u mnogim drugim situacijama kada stiže puno e-mailova sa istim subjectom tako što u kodu samo izmijenimo mai.Subject (Subject pristiglog maila), newMail.Subject (Subject maila koji šaljemo kao automatski odgovor), newMail.Body (tijelo poruke koju šaljemo kao automatski odgovor) tako što ćemo ih prilagoditi odgovarajućoj situaciji.

Slika 5.2.1: Pristigla poruka sa Subjectom „Prijava za upis“

28

Slika 5.2.2: Automatski odgovor na pristigle poruke

6. Zakljucak

Specijalistički rad prikazuje mogućnosti koje pruža VBA u MS Outlook-u i način na koji se VBA može iskoristiti da nam olakša rad u Outlook-u i automatizuje određene ponavljajuće radnje.

Cilj kojim sam se vodio tokom izrade rada je da upoznam obične korisnike MS Outlooka sa mogućnostima unapređivanja Outlook-a pomoću VBA, tako da bi mogli da prilagode Outlook interfejs okruženje prema svojim potrebama, poboljšaju mu performanse, unaprijede i ubrzaju rad pa tako uštede vrijeme i poboljšaju poslovanje.

Počevši od osnovnih karakteristika samog Outlooka i VBA programiranja preko njegovog objektnog modela, metoda i procedura sa kratkim i korisnim primjerima završio sam sa dva primjera koji u mnogome mogu olakšati rad Outlooka i koji se mogu primijeniti bilo za svakodnevni rad ili za poboljšanje poslovanja. Tako sam hronološki uspio da od osnovnih pojmova i same sintakse outlook-a dođem do izrade kodova.

Nadam se da sam uspio da vam na najbolji način prikažem i objasnim primjenu VBA u MS outlook-u, da ste shvatili koliko je to moćan alat i da sam vas zainteresovao za VBA programiranje svojim specijalističkim radom.

29

7. Literatura

[1] Sue Mosher, Microsoft Outlook programing, Wiley Publishing

[2] Guy Hurt-Davis, Mastering Microsoft VBA, Wiley Publishing

[3] Jim Boyce, Microsoft® Office Outlook® 2003 Inside Out, Microsoft press

30


Top Related