În mod implicit, din motive de securitate, macrocomenzile sunt dezactivate în Outlook 2016. Pentru a lucra cu exemplele din acest capitol sau pentru a utiliza macrocomenzi în general, trebuie să selectați opțiunea de activare în Centrul de autorizare (Trust Center) din Outlook. Pentru a face acest lucru, urmați acești pași:
Rețineți că un eveniment este ceva care se întâmplă cu un obiect, cum ar fi un clic, un mouse glisat, o apăsare de tastă, și așa mai departe. Puteți scrie cod într-un eveniment (event procedure, așa este numită) pentru a răspunde la clicuri sau la alte evenimente.
Un eveniment la nivel de aplicație este un eveniment care se întâmplă cu aplicația Outlook ca un întreg, nu cu un element individual din cadrul acestuia. De exemplu, evenimentul Startup este un eveniment la nivel de aplicație care apare atunci când outlook pornește și evenimentul Quit este un eveniment la nivel de aplicație care apare atunci când Outlook se închide. În schimb, evenimentele la nivel de element reprezintă lucruri care se întâmplă cu elemente individuale, de exemplu, deschiderea unui anumit mesaj de e-mail sau a unei anumite înregistrări sau comutarea unui utilizator de la un folder la altul.
Evenimentele la nivel de aplicație sunt mai ușor de accesat decât evenimentele la nivel de element, deoarece obiectul Application este obiectul cel mai de sus și este întotdeauna disponibil atunci când se execută Outlook.
Aceasta înseamnă că nu trebuie să utilizați o rutină de tratare a evenimentelor pentru a crea obiectul Application. El există întotdeauna. Cu toate acestea, trebuie să scrieți cod care creează un obiect pentru un eveniment la nivel de element.
Pentru a accesa evenimentele la nivel de aplicație, utilizați modulul de clasă ThisOutlookSession încorporat. Este introdus automat în Editorul VBA. Căutați în Project Explorer și extindeți elementul Project1 care reprezintă proiectul Outlook VBA și apoi extindeți elementul Obiecte Microsoft Outlook. Acum vedeți elementul ThisOutlookSession. Faceți dublu clic pe el pentru a deschide o fereastră Cod care afișează conținutul acestuia. (Dacă aceasta este prima dată când ați deschis modulul de clasă ThisOutlookSession, acesta nu va avea conținut.)
Fiecare dintre evenimentele descrise în următoarele secțiuni funcționează cu obiectul Application. Pentru simplitate, majoritatea exemplelor următoare utilizează direct obiectul Application Outlook, dar, dacă doriți, puteți declara o variabilă obiect și apoi să o utilizați pentru a returna obiectul Application.
Rețineți că puteți găsi obiectul Application în lista verticală din stânga sus a ferestrei Cod a editorului VBA. Toate evenimentele disponibile pentru obiectul Application pot fi selectate din lista verticală din partea dreaptă sus a ferestrei Cod, așa se arată în figura următoare.
Puteți selecta aceste diverse evenimente din lista verticală (Editorul completând automat structura de procedură pentru dvs.) sau doar să tastați numele evenimentului ca un sub direct în fereastra Cod. Cu toate acestea, dacă selectați din lista verticală, VBA Editor va adăuga automat și toate argumentele necesare. Deci această abordare este mai ușoară.
De asemenea, dacă declarați variabile obiect utilizând instrucțiunea WithEvents, astfel, listele verticale ale Editorului vor include aceste obiecte și evenimentele lor disponibile:
Public WithEvents myInspectors As Inspectors
Public WithEvents myInspector As Inspector
Aceasta poate fi o comandă rapidă utilă în timpul programării, deoarece apoi puteți vizualiza fiecare eveniment disponibil într-un obiect și, de asemenea, aveți tipul editorului în argumente. Mai târziu, în acest capitol, veți experimenta cu colecția Inspectors și argumentul Inspector.
Folosirea evenimentului Startup
Evenimentul Startup, care nu are argumente, apare atunci când pornește Outlook. Cu alte cuvinte, de fiecare dată când utilizatorul pornește Outlook, se va executa automat orice cod care este scris în procedura Sub Application_ Startup().
Evenimentul Startup este util pentru a vă asigura că Outlook este configurat corect pentru utilizator pentru a începe lucrul. Să presupunem că cineva începe întotdeauna prin scrierea notelor, iar prima notă este întotdeauna un memento (reminder) despre cardurile de timp (time cards). Următorul exemplu creează un nou obiect NoteItem (o notă), atribuie text proprietății sale Body și utilizează elementul Display pentru a-l afișa:
Private Sub Application_Startup()
Dim myNoteItem As NoteItem
Set myNoteItem = Application.CreateItem(ItemType:=olNoteItem)
myNoteItem.Body = "Please start a new time card for the day." myNoteItem.Display
End Sub
De asemenea, puteți pune evenimentul Startup pentru o bună utilizare prin scrierea codului cu comanda Set pentru a conecta o variabilă obiect la un obiect real pe care ar trebui să îl reprezinte. Mai multe despre acest lucru mai târziu, în secțiunea intitulată "Declararea unei variabile obiect și inițializarea unui eveniment."
Utilizarea evenimentului Quit
Evenimentul Quit apare atunci când se închide Outlook. Acest eveniment este declanșat în trei moduri posibile:
Până în momentul în care este declanșat evenimentul Quit, toate ferestrele Outlook au fost deja închise și toate variabilele globale au fost eliberate, astfel încât programatorul poate accesa prin cod în această procedură eveniment. O posibilitate, cu toate acestea, este de a afișa un mesaj pentru utilizator, ca în exemplul următor, care afișează un mesaj în ziua de lucru care precede o sărbătoare națională pentru a reaminti utilizatorului de vacanță:
Private Sub Application_Quit()
Dim strMessage As String
Select Case Format(Date, "MM/DD/YYYY")
Case "01/18/2016"
strMessage = "Lunea viitoare este Ziua Martin Luther King."
Case "02/15/2016"
strMessage = "Lunea viitoare este Ziua Președintelui."
Case "05/23/2016"
strMessage = "Lunea viitoare este Ziua Memorială."
Case "07/03/2016"
strMessage = "Vineri este Ziua Independenței." & _
" Luni este o sărbătoare a companiei."
Case "08/29/2016"
strMessage = "Lunea viitoare este Ziua Muncii."
'alte sărbători naționale aici
End Select
If strMessage = "" Then
Exit Sub
MsgBox strMessage, vbOKCancel + vbExclamation, "Nu uita..."
End Sub
Rețineți că pentru a testa această macrocomandă, trebuie să închideți Outlook. În plus, această macrocomandă poate fi testată numai la datele listate sau prin suprimarea liniei de cod Exit Sub (comentând-o) astfel:
'If strMessage = "" Then Exit Sub
Folosirea evenimentului ItemSend
Evenimentul ItemSend apare atunci când un element este trimis, fie de către utilizatorul care emite o comandă Send (de exemplu, făcând clic pe butonul Trimitere/Send dintr-o fereastră Mesaj) sau prin executarea metodei Send din codul VBA. Sintaxa pentru evenimentul ItemSend este următoarea:
Sub expression_ItemSend(ByVal Item As Object, Cancel As Boolean)
Aici, expression este o expresie necesară care returnează un obiect Application. Item este un argument obligatoriu care specifică elementul care este trimis. Cancel este un argument boolean opțional pe care îl puteți seta la False pentru a împiedica trimiterea elementului.
Următorul exemplu examinează proprietatea Subject a obiectului Item trimis. Dacă proprietatea Subject este un șir gol, caseta de mesaj solicită utilizatorului să adauge o linie de subiect, iar instrucțiunea Cancel = True revoca trimiterea elementului:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
If Item.Subject = "" Then
MsgBox "Vă rugăm să scrieți subiectul pentru acest mesaj, înainte de a-l trimite."
Cancel = True
End If
End Sub
De reținut: Pentru a testa macrocomenzile procedurii eveniment ca acestea, nu puteți apăsa doar F5 (modul în care testați macrocomenzile obișnuite). Trebuie să faceți în schimb ceva în Outlook pentru a porni evenimentul. În acest exemplu, trebuie să încercați să trimiteți un mesaj de poștă electronică fără câmpul Subiect completat.
Folosirea evenimentului NewMail
Evenimentul NewMail apare atunci când unul sau mai multe elemente de e-mail noi sosesc în Inbox. Evenimentul NewMail poate fi util pentru sortarea automată a mesajelor. De asemenea, aveți posibilitatea să specificați reguli particularizate pentru a sorta automat mesajele. Evenimentul NewMail nu are argumente.
Următorul exemplu afișează o casetă de mesaj care propune afișarea Inbox atunci când sosește o corespondență nouă, declanșând evenimentul NewMail:
Private Sub Application_NewMail()
If MsgBox("Aveti corespondenta noua. Doriti sa vedeti Inbox-ul?", _
vbYesNo + vbInformation, "Alertă corespondenta noua") = vbYes Then
Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Display
End If
End Sub
O alternativă la evenimentele NewMail
În loc să utilizați un eveniment NewMail sau NewMailEx, puteți utiliza un eveniment ItemAdd cu elementele din Inbox pentru a procesa fiecare mesaj nou care sosește.
Folosirea evenimentelor AdvancedSearchComplete și AdvancedSearchStopped
Outlook oferă două evenimente pentru lucrul cu căutările complexe create utilizând metoda AdvancedSearch. Evenimentul AdvancedSearchComplete declanșează atunci când metoda AdvancedSearch se execută prin VBA (în cod macro, nu de către utilizator) și termină căutarea. AdvancedSearchStopped eveniment declanșat atunci când metoda AdvancedSearch se execută prin VBA și este oprit utilizând metoda Stop a căutării.
Sintaxa pentru evenimentul AdvancedSearchComplete este următoarea:
Private Sub expression_ AdvancedSearchComplete(ByVal SearchObject As Object)
Aici, expression este o expresie necesară care returnează o variabilă obiect de tip Application care a fost declarată cu evenimente într-un modul de clasă. SearchObject este obiectulSearch care returnează metoda AdvancedSearch.
Următorul exemplu utilizează evenimentul AdvancedSearchComplete pentru a returna numărul de rezultate de căutare care au fost găsite de metoda AdvancedSearch:
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
MsgBox "Căutarea s-a terminat și s-au găsit " & _
SearchObject.Results.Count & " rezultate.", vbOKOnly + vbInformation, _
"Căutare avansată completă eveniment"
End Sub
Următorul exemplu utilizează evenimentul AdvancedSearchStopped pentru a informa utilizatorul că căutarea a fost oprită:
Private Sub Application_AdvancedSearchStopped(ByVal SearchObject As Search)
MsgBox "Căutarea a fost oprită de o comandă Stop.", vbOKOnly
End Sub
Folosirea evenimentului MAPILogonComplete
Evenimentul MAPILogonComplete apare atunci când utilizatorul s-a autentificat (log on) cu succes în Outlook.
Utilizați evenimentul MAPILogonComplete pentru a vă asigura că Outlook este configurat corect pentru utilizator sau pur și simplu pentru a afișa unele informații într-un mesaj. Evenimentul MAPILogonComplete nu are argumente.
Următorul exemplu de procedură MAPILogonComplete afișează un mesaj despre condițiile de tranzacționare curente atunci când utilizatorul s-a autentificat cu succes în Outlook. Codul include o linie comentată care indică în cazul în care variabilele string strPubDownBegin și strPubForecast ar fi declarate și atribuite date într-o punere în aplicare din lumea reală a acestui exemplu:
Private Sub Application_MAPILogonComplete()
Dim strMsg As String
'variabilele de tip String strPubDowBegin și strPubForecast sunt declarate și atribuite aici
strMsg = "Bine ati venit la UltraBroker Trading System!" & vbCr & vbCr strMsg = strMsg & "Valoarea de pornire de astăzi este " & strPubDowBegin & "." _
& vbCr & vbCr
strMsg = strMsg & "Previziunile de tranzacționare de astăzi sunt " & strPubForecast & "."
MsgBox strMsg, vbOKOnly + vbInformation, _
"UltraBroker Trading System Logon Greeting"
End Sub
Această macrocomandă afișează o casetă de mesaj, care se află sub desenul albastru de pornire Outlook. Pentru a-l vedea, trageți la o parte desenul. Din păcate, nu există nici o modalitate simplă de a forța o casetă de mesaj să se afișeze oriunde, ea fiind afișată numai pe mijlocul ecranului.
Folosirea evenimentului Reminder
Evenimentul Reminder este declanșat imediat înainte de un memento pentru o întâlnire, activitate sau rezervare care este afișat pentru utilizator. Aveți posibilitatea să utilizați evenimentul Reminder pentru a întreprinde o acțiune legată de memento. Deoarece memento-ul în sine este adecvat pentru reamintire, evenimentul Reminder tinde să fie mai util atunci când Outlook este accesat printr-o procedură decât atunci când un utilizator lucrează interactiv cu Outlook. Sintaxa este următoarea:
Sub expression_Reminder(ByVal Item As Object)
Aici, expression este o expresie necesară care returnează un obiect Application, iar Item este un obiect AppointmentItem, MailItem, ContactItem sau TaskItem asociat cu Reminder.
Folosirea evenimentului OptionsPagesAdd
Evenimentul OptionsPagesAdd apare atunci când se deschide caseta de dialog Opțiuni (Tools > Options), fie caseta de dialog Properties pentru un folder, cum ar fi Inbox. (Pentru a deschide caseta de dialog Properties pentru un folder, faceți clic cu butonul din dreapta pe folder, apoi alegeți Properties din meniul contextual.) Aveți posibilitatea să utilizați acest eveniment pentru a adăuga la caseta de dialog Opțiuni sau la caseta de dialog Properties o pagină particularizată (care este conținută într-un program de completare COM [Component Object Model] pe care l-ați creat). Sintaxa pentru evenimentul OptionsPagesAdd este următoarea:
Sub expression_OptionsPagesAdd(ByVal Pages As PropertyPages, _
ByVal Folder As MAPIFolder)
Aici, expression este o expresie necesară care returnează un obiect Application sau un obiect NameSpace. Pages este un argument obligatoriu care oferă colecția de pagini de proprietate particularizate adăugate la caseta de dialog. Folder este un argument necesar utilizat atunci când expression returnează un obiect MAPIFolder. Folder returnează obiectul MAPIFolder pentru care este deschisă caseta de dialog Properties.