Lucrul cu obiectul Application

La un moment dat, poate rula o singură instanță de Outlook. (În schimb, aveți posibilitatea să executați mai multe instanțe de Word sau Excel în același timp.) Probabil că nu veți găsi această limitare atunci când scrieți macrocomenzi care funcționează în Outlook. Dar dacă creați o procedură într-o altă aplicație (cum ar fi Word) care va comunica cu și va manipula Outlook, va trebui să verificați dacă există o instanță de Outlook care rulează în prezent în computer înainte de a crea o instanță printr-o macrocomandă.

Accesarea unei aplicații dintr-o altă aplicație Office utilizând macrocomenzi, va fi descrisă într-o altă secțiune.

Introducerea obiectului NameSpace

Iată un concept nou: NameSpace. Dintre toate aplicațiile Office activate pentru VBA, numai Outlook utilizează această tehnică. Abordarea NameSpace este unică pentru Outlook, fapt care demonstrează că diferitele echipe de aplicații Microsoft Office funcționează parțial independent atunci când construiesc structurile de tip obiect-model.

Lucrul cu Inspectors și Explorers

Multe activități din Outlook, cum ar fi accesarea mesajelor de e-mail, sarcinilor sau programului de contacte, realizate prin VBA, necesită utilizarea metodei GetNameSpace a obiectului Application Outlook pentru a returna obiectul NameSpace care reprezintă obiectul rădăcină al sursei de date. Oricum, asta e versiunea oficială. Rețineți că trebuie să utilizați următoarea sintaxă pentru a obține cele mai multe locuri de muncă efectuate în Outlook VBA:

expression.GetNameSpace(Type)

Aici, expression este o expresie necesară care returnează un obiect aplicație. Tipul este un argument de tip String obligatoriu care specifică tipul de spațiu de nume pe care doriți să îl returnați. Outlook suportă numai sursa de date MAPI, astfel încât să utilizați întotdeauna Type: = "MAPI" cu metoda GetNameSpace. De exemplu, următoarea instrucțiune returnează NameSpace și utilizează proprietatea CurrentUser pentru a afișa numele utilizatorului curent într-o casetă de mesaj:

MsgBox Application.GetNamespace("MAPI") .CurrentUser

CE ESTE UN API?

MAPI Înseamnă Messaging Application Programming Interface. Este o colecție de funcții scrise de Microsoft, care pot fi utilizate în programare legate de e-mail. Diferite tipuri de API-uri sunt utilizate în diverse scopuri. API este doar un alt termen pentru o bibliotecă de funcții încorporate. Și namespace ar putea fi un sinonim. Namespace ca termen general în programarea pe calculator înseamnă o colecție de funcții care este autonomă. Acest lucru vă permite să aveți funcții cu nume identice care se disting prin elemente NameSpace individuale. Astfel, VBA sau alt limbaj de programare știe ce funcție să declanșeze atunci când apare în cod. Este similar cu un profesor care folosește numele complete pentru a distinge Ion Popescu de Ion Ionescu. Având în vedere că au Ion în comun, este necesară modificarea suplimentară. În același mod, elementele Namespace oferă adjective pentru a face deosebire între funcțiile denumite identic. Termenul de namespace este, de asemenea, utilizat în unele alte contexte, de exemplu în XML pentru a distinge elemente sau atribute denumite identic.

Accesarea folderelor implicite în cadrul obiectului NAMESPACE

Obiectul NameSpace conține folderele pe care le utilizează Outlook — atât colecția de foldere implicite utilizate pentru stocarea elementelor implicite, cum ar fi mesajele de poștă electronică, activitățile și persoanele de contact, precum și orice alte foldere create de utilizator sau de proceduri particularizate. Aceste foldere sunt reprezentate în Outlook VBA de obiecte mapiFolder care sunt organizate într-o colecție de foldere.

Probabil că vă așteptați să aflați care sunt folderele implicite curente, folosind o metodă a colecției Folders. Dar nu-i așa. Având în vedere că suntem într-o situație specială aici (care se ocupă cu e-mail), GetDefaultFolder este o metodă a obiectului NameSpace. Sintaxa este următoarea:

expression.GetDefaultFolder(FolderType)

Aici, expression este o expresie necesară care returnează un obiect NameSpace. FolderType este un argument obligatoriu care specifică ce folder implicit doriți să returnați. Numele constantelor sunt auto-explicative: olFolderCalendar, olFolderConflicts, olFolderContacts, olFolder DeletedItems, olFolderDrafts, olFolderInbox, olFolderJournal, olFolderJunk, olFolder LocalFailures, olFolderManagedEmail, olFolderNotes, olFolderOutbox, olFolderRSSFeeds, olFolderSentMail, olFolderServerFailures, olFolderSuggestedContacts, olFolderSync Issues, olFolderTasks, olFolderToDo, or olPublicFoldersAllPublicFolders.

Următorul exemplu creează variabila obiect myCal și îi atribuie folderul calendar implicit:

Dim myCal As MAPIFolder
Set myCal = Application.GetNamespace("MAPI") _
.GetDefaultFolder(FolderType:=olFolderCalendar)

ACCESAREA ALTOR FOLDERE CU OBIECTUL NAMESPACE

Accesarea folderelor implicite din obiectul NameSpace prin metoda GetDefaultFolder este simplă, dar de multe ori va trebui să accesați alte foldere. În acest caz, utilizați colecția Folders.

Următorul exemplu afișează o casetă de mesajcare conține o listă a tuturor folderelor conținute în namespace:

Sub List_All_NameSpace_Folders()
Dim myNS As NameSpace 
Dim myFolder As MAPIFolder 
Dim mySubfolder As MAPIFolder 
Dim strFolderList As String
strFolderList = "NameSpace Outlook contine aceste directoare:" _
& vbCr & vbCr
Set myNS = Application.GetNamespace("MAPI")
With myNS
For Each myFolder In myNS.Folders
strFolderList = strFolderList & myFolder.Name & vbCr 
For Each mySubfolder In myFolder.Folders
           strFolderList = strFolderList & "* " & mySubfolder.Name & vbCr
        Next mySubfolder 
     Next myFolder
End With
MsgBox strFolderList, vbOKOnly + vbInformation, "Folders in NameSpace"
End Sub

Ce sunt Inspectors și Explorers

VBA utilizează două obiecte Outlook majore pe care majoritatea utilizatorilor nu le-ar recunoaște lucrând numai cu interfața cu utilizatorul Outlook:

    • Un Inspector este un obiect care reprezintă o fereastră care afișează un anumit element Outlook, cum ar fi un mesaj de e-mail sau o rezervare.
    • Un obiect Explorer reprezintă o fereastră care afișează conținutul unui folder, cum ar fi o listă de e-mailuri.

Obiecte din obiecte

Spre deosebire de comportamentul multor colecții, un obiect Explorer este inclus în colecția Explorers, chiar dacă nu este vizibil.

Deschiderea unei ferestre Inspector

Pentru a deschide o fereastră Inspector pentru un obiect, utilizați metoda Display a obiectului Inspector. De exemplu, următoarea instrucțiune afișează o fereastră Inspector pentru obiectul la care face referire variabila obiect myltem:

myItem.Display

Returnarea ferestrei Inspector asociată cu un articol

Pentru a returna fereastra Inspector asociată cu un element, utilizați proprietatea GetInspector a obiectului corespunzător. Următorul exemplu returnează inspectorul pentru elementul identificat de variabila obiect myltem:

myltem.GetInspector

Returnarea Active Window, Inspector, sau Explorer

Spre deosebire de Word, Excel și PowerPoint, Outlook nu are un obiect ActiveWindow care reprezintă fereastra activă. Cu toate acestea, obiectul aplicație Outlook are o metodă ActiveWindow, care returnează fereastra Outlook cea mai din față. (Dacă nu există nicio fereastră, ActiveWindow nu returnează nimic.)

Această fereastră va fi fie un obiect Inspector, fie un obiect Explorer. În mod similar, metoda ActiveExplorer a obiectului aplicație returnează exploratorul activ și metoda ActiveInspector a obiectului aplicație returnează inspectorul activ.

Aveți posibilitatea să utilizați funcția TypeName pentru a determina ce tip de fereastră este activă. Următorul exemplu afișează o casetă de mesaj care afirmă ce tip de fereastră este activ dacă există o fereastră activă:

If Not TypeName(ActiveWindow) = "Nothing" Then
MsgBox "O fereastra " & TypeName(ActiveWindow) & " este activa."
End If

Observați că aici folosim comanda If Not...Nothing. Dubla negație înseamnă "dacă fereastra activă nu este nimic."

Lucrul cu Inspectorul activ

În multe proceduri, va trebui să determinați care este cel mai de sus Inspector din aplicația Outlook, fie pentru a putea lucra cu acel Inspector, fie să puteți restabili inspectorul în cea mai înaltă poziție la sfârșitul unei proceduri care manipulează alte elemente Inspector. (Rețineți, trebuie să încercați întotdeauna să restaurați o aplicație la starea în care se afla atunci când procedura a început executarea. Aceasta este o curtoazie pentru utilizator și dovezi de programare atentă, de calitate.)

Pentru a afla care este elementul Inspector de la cel mai înalt nivel, utilizați metoda ActiveInspector a obiectului Application. De exemplu, următoarea instrucțiune maximizează fereastra Inspector de la cel mai înalt nivel:

Application.ActiveInspector.WindowState = olMaximized

Rețineți că acest exemplu încearcă să maximizeze o fereastră Inspector, deci trebuie să existe o fereastră Inspector deschisă atunci când executați codul. Cu alte cuvinte, faceți dublu clic pe un mesaj de e-mail în Outlook pentru a-l deschide într-o fereastră separată de fereastra Outlook. Această fereastră separată, care afișează un singur e-mail, este un element Inspector. Dacă doriți să blocați această eroare (și ar trebui) pentru a împiedica eșuarea macrocomenzii atunci când nu există niciun Inspector, trebuie să vă asigurați că există un element Inspector activ. Aveți posibilitatea să verificați că funcția TypeName nu returnează nimic atunci când se execută pe metoda ActiveInspector a obiectului aplicație, astfel:

Sub MaxIt()
If TypeName(Application.ActiveInspector) = "Nothing" Then
MsgBox "In prezent, niciun element nu este deschis."
End 'inchide macrocomanda
Else
Application.ActiveInspector.WindowState = olMaximized 
End If 
End Sub

Crearea elementelor

Pentru a crea elemente noi în Outlook, utilizați metoda CreateItem sau metoda CreateItemFromTemplate a obiectului Application. Metoda CreateItem creează elemente implicite, în timp ce metoda CreateItemFromTemplate creează elemente bazate pe șabloanele specificate.

Aveți posibilitatea să utilizați formulare particularizate pentru a crea obiecte noi

De asemenea, aveți posibilitatea să creați obiecte noi utilizând un formular particularizat. Pentru a face acest lucru, utilizați metoda Add cu colecția Items.

Utilizarea metodei CreateItem pentru crearea elementelor implicite

Sintaxa pentru metoda CreateItem este următoarea:

expression.CreateItem(ItemType)

Aici, expression este o expresie necesară care returnează un obiect Application. ItemType este un argument obligatoriu care specifică tipul de element care va fi creat: olAppointmentItem, ol ContactItem, olDistributionListItem, olJournalItem, olMailItem, MobileItemMMS, MobileItemSMS, olNoteItem, olPostItem sau olTaskItem.

Următorul exemplu creează un mesaj de poștă electronică nou; atribuie un destinatar (prin setarea proprietății To), un subiect (prin setarea proprietății Subject) și a corpului textului (prin setarea proprietății Body); și apoi afișează fereastra Message:

Dim myMessage As MailItem
Set myMessage = Application.CreateItem(ItemType:=olMailItem)
With myMessage
.To = "test@example.com"
.Subject = "Mesaj Test"
.Body = "Acesta este un mesaj test."
.Display 
End With

Închiderea Outlook

Pentru a părăsi Outlook, utilizați metoda Quit a obiectului Application. Această metodă nu are argumente:

Application.Quit

De asemenea, poate doriți să lucrați cu evenimentele disponibile pentru obiectul Application. Secțiunea Lucrul cu evenimente în Outlook descrie modului de lucru cu aceste evenimente la nivel de aplicație și cu evenimente la nivel de element.