Lucrul cu Active Cell sau Selection

Într-o procedură care manipulează o selecție făcută de utilizator, veți lucra de obicei fie cu celula activă, fie cu selecția. Celula activă este întotdeauna o singură celulă, iar selecția poate cuprinde mai multe celule sau alte obiecte.

Lucrul cu Active Cell

Proprietatea ActiveCell a obiectului Application sau a obiectului Window returnează un obiect Range care reprezintă celula activă din aplicația Excel sau dintr-o fereastră specificată. Dacă utilizați ActiveCell fără a specifica o fereastră, VBA returnează celula activă în fereastra activă în prezent.

De exemplu, următoarea instrucțiune returnează adresa celulei active din registrul de lucru activ:

MsgBox (ActiveCell.Address)

Acest cod ar returna rezultatul indicat în figura următoare, dacă celula selectată în prezent este A1.

Adresa celulei active este preluată prin intermediul obiectului ActiveCell.

Următoarea instrucțiune returnează textul din celula activă din prima fereastră deschisă în registrul de lucru numit Planificare.xlsx:

MsgBox Workbooks("Planificare.xlsx").Windows(1).ActiveCell.Text

Dacă nu este activă nicio foaie de lucru sau nicio foaie diagramă, nu există nicio celulă activă. Dacă încercați să accesați ActiveCell, VBA returnează o eroare. Deci, înainte de a utiliza codul care presupune că există o celulă activă, verificați că ActiveCell nu este Nothing:

If ActiveCell Is Nothing Then End

Obținerea și setarea valorii ActiveCell

Pentru a returna valoarea celulei active, utilizați proprietatea Value. De exemplu, următoarea instrucțiune setează valoarea celulei active la 25:

ActiveCell.Value = 25

Și următoarea declarație preia valoarea celulei active:

MsgBox ActiveCell.Value

Mutarea celulei active în altă adresă

Este adesea convenabil să se lucreze cu obiectul ActiveCell în cod, astfel încât, uneori, veți dori să faceți o celulă diferită ca fiind celula activă, pentru a lucra cu ea prin intermediul obiectului ActiveCell. Pentru ca o celulă să fie celulă activă, utilizați metoda Activate cu obiectul Range corespunzător. De exemplu, următoarea instrucțiune activează celula L7, ea devenind celula activă din foaia de lucru identificată de variabila obiect myWorksheet

myWorksheet.Range("B5").Activate

Adesea, va trebui să mutați celula activă într-o altă zonă, cu un număr specificat de rânduri sau coloane (cu alte cuvinte, la o adresă relativă față de locația celulei active - spre deosebire de o adresă absolută, cum ar fi C12). Pentru aceasta, utilizați proprietatea Offset a obiectului celulei active, specificând numărul de rânduri cu argumentul RowOffset și numărul de coloane cu argumentul ColumnOffset. Utilizați un decalaj pozitiv pentru a muta celula activă la dreapta sau în jos și un decalaj negativ pentru a muta celula activă la stânga sau în sus. De exemplu, următoarea instrucțiune mută celula activă în sus două rânduri (RowOffset:=-2) și patru coloane la dreapta (ColumnOffset:=4):

ActiveCell.Offset(RowOffset:=-2, ColumnOffset:=4).Activate

În macrocomenzile declanșate de utilizator, este de obicei o idee bună să memorați care era celula activă înainte de a începe procedura. Pentru aceasta, aveți posibilitatea să stocați locația celulei active și apoi să reveniți la locația stocată după terminarea procedurii. Iată un exemplu:

Set myActiveCell = ActiveCell
Set myActiveWorksheet = ActiveSheet
Set myActiveWorkbook = ActiveWorkbook
 'aici urmează comenzile din procedura
myActiveWorkbook.Activate
myActiveWorksheet.Activate
myActiveCell.Activate

FIȚI ATENȚI CU ECUAȚIILE CARE UTILIZEAZĂ ADRESE DE CELULE RELATIVE

Testați întotdeauna cu atenție procedurile cu diferite tipuri de date. Uneori, erorile pot apărea atunci când mutați celule în care sunt formule care folosesc adrese relative.

Lucrul cu regiunea din jurul celulei active

Aveți posibilitatea să lucrați cu zona de celule din jurul celulei active utilizând proprietatea CurrentRegion pentru a returna obiectul CurrentRegion. Regiunea curentă se extinde de la celula activă la primul rând gol de mai sus și de mai jos și la prima coloană necompletată la stânga și la dreapta. Cu alte cuvinte, dacă nu există rânduri sau coloane goale în întreaga foaie de lucru, atunci regiunea se referă la toate celulele din foaia de lucru.

De exemplu, următoarele declarații utilizează proprietatea Font a obiectului CurrentRegion pentru a seta fontul regiunii curente la 12 puncte Times New Roman fără aldin sau cursiv:

With ActiveCell.CurrentRegion.Font
  .Name = "Times New Roman"
  .Size = 12 
  .Bold = False 
  .Italic = False 
End With

În macrocomenzile proiectate pentru a fi executate de un utilizator, va trebui adesea să lucrați cu celulele selectate de utilizator. De exemplu, un utilizator poate selecta o zonă de celule, apoi să execute o macrocomandă pentru a manipula conținutul acelui interval.

Pentru a lucra cu intervalul selectat de utilizator, folosiți proprietatea RangeSelection a obiectului WIndow corespunzător. De exemplu, este posibil să atribuiți proprietatea RangeSelection unui interval, astfel încât să lucrați cu el într-o macrocomandă, apoi să îl selectați din nou la sfârșitul macrocomenzii, lăsând utilizatorul gata să lucreze din nou cu selecția. Iată un exemplu:

Dim myMacroRange As Range
Set myMacroRange = ActiveWindow.RangeSelection
With myMacroRange
  'comenzi de lucru cu intervalul selectat
End With
myMacroRange.Activate