Lucrul cu colecții

Atunci când un obiect conține mai mult de un obiect de același tip, setul de obiecte conținute se spune că este grupat într-o colecție. De exemplu, Word folosește obiecte Document care sunt grupate în colecția Documents; PowerPoint are o colecție Presentations pentru obiectele Presentation, iar Excel are colecția Workbooks.

Ca și în aceste exemple, numele celor mai multe colecții este dat de pluralul obiectului conținut. Există câteva excepții, cum ar fi colecția Sheets din Excel care conține obiectele Worksheet. Dar, în general, numele celor mai multe colecții sunt ușor de dedus din numele obiectelor pe care le conțin - și invers.

O colecție, luată ca un întreg, este ea însăși un obiect și poate avea propriile proprietăți și metode. De exemplu, multe colecții au o proprietate Count care spune câte obiecte sunt în colecție. Următorul exemplu arată câte documente se află în colecția de Documents:

Sub GetDocCount()
  Dim lngCount As Long 
  lngCount = Documents.Count 
  MsgBox lngCount 
End Sub

Colecțiile tind să aibă mai puține proprietăți și metode decât obiectele individuale. Cele mai multe colecții au o metodă de adăugare Add pentru a adăuga un alt obiect la colecție. Unele colecții sunt numai pentru citire și nu au o metodă de adăugare. Cele mai multe colecții au o proprietate Item (proprietatea implicită) pentru a accesa un element din colecție.

Cele mai multe colecții din VBA au proprietățile de bază enumerate mai jos.

Lucrul cu un obiect dintr-o colecție

Pentru a lucra cu un obiect dintr-o colecție, obiectul din colecție se identifică fie prin numele său, fie prin poziția sa în colecție. De exemplu, următoarea instrucțiune returnează primul obiect Document din colecția Documents și afișează proprietatea Name într-o casetă de mesaje:

MsgBox Documents(1).Name

Majoritatea colecțiilor încep numerotarea de la zero (sunt Zero-Based)

Implicit, matricile din VBA încep numerotarea de la zero. Primul element din matrice are indexul 0 (cu excepția cazului în care declarația Option Base 1 forțează ca primul index să fie 1 - detalii pe pagina Ce este o matrice?.

Din fericire, majoritatea colecțiilor VBA sunt implicit sensibile la 1 pentru primul element din colecție. Acest lucru facilitează identificarea obiectului. De exemplu, Documents(1) preia primul document, Workbooks(2) preia numele celui de al doilea registru de lucru și așa mai departe.

Dar există și excepții de la această regulă. Anumite colecții în implementările VBA sunt bazate pe numerotarea care începe la 0 (zero), nu de la 1. De exemplu, Access - aproape întotdeauna cazul special în VBA - utilizează colecții numerotate de la zero. Pentru a verifica dacă o anumită colecție începe numerotatea de la unu sau de la zero, trebuie consultat subiectul Help pentru colecția respectivă.

Opțional, se poate utiliza proprietatea Item pentru a returna un obiect din colecție, dar deoarece Item este proprietatea implicită a unei colecții, nu este necesară scrierea lui. Următoarele două instrucțiuni au același efect, astfel încât nu există avantaje pentru utilizarea metodei Item:

strName = Documents(1).Name 
strName = Documents.Item(1).Name

Adăugarea unui obiect la o colecție

Pentru a crea un obiect nou într-o colecție, el trebuie adăugat la acea colecție. În multe cazuri, se folosește metoda Add pentru a face acest lucru. De exemplu, următoarea declarație creează un nou obiect Document în Word:

    Documents.Add