Lucrul cu foi de lucru

Majoritatea registrelor de lucru pe care trebuie să le manipulați prin VBA vor conține una sau mai multe foi de lucru. Prin urmare, multe proceduri macro vor trebui să lucreze cu foi de lucru - inserarea lor, ștergerea lor, copierea sau mutarea lor sau pur și simplu imprimarea unei zone din acestea.

Fiecare foaie de lucru este reprezentată de un obiect Sheet. Obiectele Sheet sunt conținute în colecția Sheets.

Inserarea unei foi de lucru

Pentru a insera o foaie de lucru într-un registru de lucru, utilizați metoda Add cu colecția Sheets. Sintaxa este următoarea:

expression.Add(Before, After, Count, Type)

Componentele sintaxei sunt:

  • expression este o expresie necesară care returnează o colecție Sheets. De multe ori, veți dori să utilizați direct colecția Sheets.
  • Before este un argument opțional de tip Variant care specifică foaia înaintea căreia se adaugă noua foaie. After este un argument opțional de tip Variant care specifică foaia după care se adaugă noua foaie. De obicei, veți dori să specificați fie Before, fie After, dar nu ambele. De asemenea, puteți omite ambele argumente pentru ca Excel să introducă noua foaie înaintea foii de lucru active.
  • Count este un argument opțional de tip Variant care specifică câte foi vor fi adăugate. Dacă omiteți Count, VBA utilizează valoarea implicită, 1.
  • Type este un argument opțional de tip Variant care specifică tipul foii inserate. Valoarea implicită este xlWorksheet, o foaie de lucru standard. De asemenea, puteți introduce o foaie diagramă (xlChart), o foaie de macrocomandă Excel 4 (xlExcel4MacroSheet), sau o foaie de macrocomandă internațională Excel 4 (xlExcel4IntlMacroSheet).

De exemplu, următoarele declarații declară o variabilă obiect Worksheet numită mySheet, inserează o foaie de lucru înainte de prima foaie în primul registru de lucru deschis și îi atribuie variabila mySheet, și apoi îi setează la proprietatea Name numele Rezumat (proprietatea Nume controlează textul care apare în fila foii de lucru):

Dim mySheet As Worksheet
Set mySheet = Workbooks(1).Sheets.Add(before:=Sheets(1))
mySheet.Name = "Rezumat"

După ce executați această macrocomandă, căutați foaia Rezumat în eticheta din partea de jos a registrului de lucru.

Următoarele declarații inserează două foi de lucru tip diagramă după ultima foaie de lucru în registrul de lucru activ. Foile diagramă primesc nume implicite, cum ar fi Chart1 și Chart2:

ActiveWorkbook.Sheets.Add _
After:=Sheets(Sheets.Count), Count:=2, Type:=xlChart

Ștergerea unei foi de lucru

Pentru a șterge o foaie de lucru, utilizați metoda Delete a obiectului Sheet corespunzător. Metoda Delete nu are argumente. De exemplu, următoarea instrucțiune șterge foaia de lucru denumită Rezumat din registrul de lucru la care se face referire variabila obiect myWorkbook

Dim myWorkbook As Workbook 
Set myWorkbook = Workbooks(1)
myWorkbook.Sheets("Rezumat").Delete

Dacă ștergeți o foaie de lucru, pierdeți orice date aflate în acea foaie de lucru; astfel încât, atunci când Excel este în modul interactiv (utilizatorul poate șterge foaia prin intermediul tastaturii, nu prin macrocomandă), Excel solicită utilizatorului să confirme ștergerea în mod implicit (a se vedea figura următoare).

Cu toate acestea, într-o macrocomandă puteți evita afișarea acestui mesaj de avertizare. De exemplu, într-o procedură care adaugă o foaie de lucru fără știrea utilizatorului, o utilizează pentru a manipula datele, apoi o șterge, pur și simplu nu aveți nevoie de această casetă de dialog de avertizare. În mod implicit, nu se va afișa atunci când se realizează o ștergere printr-o macrocomandă. Cu toate acestea, dacă aveți nevoie de macrocomandă pentru a suprima o casetă de dialog, aveți posibilitatea să dezactivați alertele în Excel setând proprietatea DisplayAlerts a obiectului Application la False înainte de executarea codului macro principal, apoi reactivați avertizările înainte de a ieși din macrocomandă, astfel:

Application.DisplayAlerts = False

myWorkbook.Sheets("Rezumat").Delete 
Application.DisplayAlerts = True

Copierea sau mutarea unei foi de lucru

Pentru a copia o foaie de lucru, utilizați metoda Copy a obiectului Sheet corespunzător. Pentru a muta o foaie de lucru, utilizați metoda Move. Sintaxa este următoarea:

expression.Copy(Before, After) expression.Move(Before, After)

Aici, expression este o expresie necesară care returnează un obiect Worksheet. Before este un argument opțional de tip Variant care specifică foaia înainte de care se plasează copia sau foaia mutată. After este un argument opțional de tip Variant care specifică foaia după care va fi plasată foaia:

De obicei, veți dori să specificați fie Before fie After, dar nu ambele.

Aveți posibilitatea să specificați numele altui registru de lucru pentru a copia sau muta foaia de lucru în alt registru de lucru.

De asemenea, puteți omite ambele argumente pentru a face ca Excel să creeze un registru de lucru nou care conține foaia copiată sau mutată. Noul registru de lucru devine registrul de lucru activ, astfel încât să utilizați obiectul ActiveWorkbook pentru a începe lucrul cu acesta sau pentru a-l atribui unei variabile obiect.

De exemplu, următoarea instrucțiune copiază foaia de lucru denumită Costuri-Materiale în registrul de lucru numit Constructii.xlsx, plasând copia după ultima foaie de lucru curentă din registrul de lucru:

Workbooks("Constructii.xlsx").Sheets("Costuri-Materiale").Copy, _ After:=Sheets(Sheets.Count)

Următoarea linie de cod mută foaia de lucru denumită Case din registrul de lucru numit Planificare.xlsx în registrul de lucru numit Constructii.xlsx, inserând foaia de lucru înaintea primei foi de lucru existente din registrul de lucru:

Workbooks("Planificare.xlsx").Sheets("Case").Move , _
Before:=Workbooks("Constructii.xlsx").Sheets(1)

Imprimarea unei foi de lucru

Pentru a imprima o foaie de lucru, utilizați metoda PrintOut cu obiectul Worksheet corespunzător.

Metoda PrintOut poate fi utilizată cu mai multe obiecte

Mai multe obiecte au metoda PrintOut. Aceste obiecte includ colecția Worksheets; obiectul Chart și colecția Charts; obiectul Workbook; obiectul Window; și obiectul Range.

Sintaxa pentru metoda PrintOut este următoarea:

expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

Componentele sintaxei sunt:

  • expression este o expresie necesară care returnează obiectul Worksheet sau alt obiect corespunzător căruia i se aplică metoda PrintOut.
  • From este un argument opțional de tip Variant care specifică numărul paginii la care se începe imprimarea. Omiteți From pentru a începe imprimarea de la începutul obiectului. Rețineți că From și To se referă la paginile pentru imprimare, nu la numărul total de pagini pe care le preia obiectul.
  • To este un argument opțional de tip Variant care specifică numărul paginii la care se va opri imprimarea. Omiteți argumentul To pentru a imprima până la sfârșitul obiectului.
  • Copies este un argument opțional de tip Variant care specifică numărul de copii de imprimat. Dacă omiteți Copies, Excel imprimă o copie.
  • Preview este un argument opțional de tip Variant pe care îl puteți seta la True pentru a afișa obiectul în Examinare (Print Preview) înainte de a-l imprima. Setați Preview la False, sau pur și simplu omiteți acest argument, pentru a imprima obiectul fără a-l examina. Utilizați metoda PrintPreview pentru a afișa un obiect în Examinare înaintea imprimării fără a-l imprima.
  • ActivePrinter este un argument opțional de tip Variant pe care îl puteți utiliza pentru a specifica imprimanta cu care să imprimați.
  • PrintToFile este un argument opțional de tip Variant pe care îl puteți seta la True pentru a face ca Excel să direcționeze imprimarea la un fișier, nu la Imprimantă. Când imprimați într-un fișier, puteți utiliza proprietatea PrToFileName pentru a specifica numele fișierului, sau omiteți-l pentru ca Excel să ceară utilizatorului numele fișierului.
  • Collate este un argument opțional de tip Variant pe care îl puteți seta la True pentru ca Excel să imprime mai multe copii pentru asamblare, în loc să imprime toate copiile unei pagini, apoi toate copiile următoarei pagini și așa mai departe.
  • PrToFileName este un argument opțional de tip Variant pe care îl puteți utiliza cu PrintToFile:=True pentru a specifica numele fișierului de imprimare.
  • IgnorePrintAreas este un argument opțional de tip Variant. Setat la False, acest argument imprimă întreaga zonă de imprimare specificată; atunci când este True, întregul obiect este imprimat și orice zonă de imprimare este ignorată. În Excel poate fi definită o zonă de imprimare și acest lucru este util ca o modalitate de imprimare doar a unei anumite zone de celule. Odată specificată, zona de imprimare este reținută de Excel până când fie o goliți, fie specificați o nouă zonă de imprimare. Definiți o zonă de imprimare selectând celulele pe care doriți să le imprimați, apoi făcând clic pe eticheta Page Layout de pe Ribbon. Clic pe opțiunea Print Area din zona Page Setup de pe Ribbon.

Următoarea instrucțiune imprimă două copii ale fiecărei pagini a primei foi de lucru din registrul de lucru activ, colaționând paginile:

   ActiveWorkbook.Sheets(1).Printout Copies:=2, Collate:=True

Următoarea instrucțiune imprimă primele două pagini ale foii de lucru denumită Rezumat în registrul de lucru numit Planificare.xlsx într-un fișier denumit Rezumat planificare.prn din folderul de rețea \\server\to_print:

Workbooks("Planificare.xlsx").Sheets("Rezumat").PrintOut From:=1, To:=2, _ 
   PrintToFile:=True, _
   PrToFileName:="\\server\to_print\Rezumat Planificare.prn" 

Protejarea unei foi de lucru

Pentru a proteja o foaie de lucru, utilizați metoda Protect cu obiectul Worksheet corespunzător. Sintaxa este următoarea:

expression .Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)

Componentele sintaxei sunt:

  • expression este o expresie necesară care returnează un obiect Worksheet.
  • Password este un argument opțional de tip Variant care specifică parola pentru deprotejarea foii de lucru. Password este sensibil la litere mari și mici. Veți dori aproape întotdeauna să furnizați Password pentru a împiedica persoanele neautorizate să deprotejeze registrul de lucru.
  • DrawingObjects este un argument opțional de tip Variant pe care îl puteți seta la True pentru a proteja formele din foaia de lucru. Setarea implicită este False.
  • Contents este un argument opțional de tip Variant care protejează celulele blocate atunci când este setat la True, valoarea sa implicită. Setați Contents la False pentru a lăsa celulele blocate neprotejate.
  • Scenarios este un argument opțional de tip Variant care protejează scenariile atunci când este setat la True, valoarea sa implicită.
  • UserInterfaceOnly este un argument opțional de tip Variant pe care îl puteți seta la True pentru a lăsa macrocomenzile neprotejate protejând în același timp interfața cu utilizatorul. Valoarea implicită este False.
  • AllowFormattingCells, AllowFormattingColumns și AllowFormattingRows sunt argumente opționale de tip Variant pe care le puteți seta la True pentru a permite formatarea celulelor, coloanelor, respectiv rândurilor. Valoarea implicită pentru fiecare argument este False.
  • AllowInsertingColumns, AllowInsertingRows și AllowInsertingHyperlinks sunt argumente opționale de tip Variant pe care le puteți seta la True pentru a permite utilizatorului să insereze coloane, rânduri și, respectiv, hyperlink-uri. Valoarea implicită pentru fiecare argument este False.
  • AllowDeletingColumns și AllowDeletingRows sunt argumente opționale de tip Variant pe care le puteți seta la True pentru a permite utilizatorului să șteargă coloane sau rânduri, respectiv, în cazul în care toate celulele din coloană sau de pe rând sunt deblocate. Setarea implicită este False.
  • AllowSorting este un argument opțional de tip Variant pe care îl puteți seta la True pentru a permite utilizatorului să sorteze celulele deblocate din foaia de lucru protejată. Setarea implicită este False.
  • AllowFiltering este un argument opțional de tip Variant pe care îl puteți seta la True pentru a permite utilizatorului să seteze filtre sau să modifice criteriile de filtrare (dar fără a activa sau dezactiva un filtru automat) într-o foaie de lucru protejată. Setarea implicită este False.
  • AllowUsingPivotTables este un argument opțional de tip Variant pe care îl puteți seta la True pentru a permite utilizatorului să lucreze cu tabele pivot în foaia de lucru protejată. Valoarea implicită este False.

De exemplu, următoarea instrucțiune protejează foaia de lucru la care face referire variabila obiect myWorksheet utilizând parola no1gets1n:

  myWorksheet.Protect Password:="no1gets1n"

Următoarea instrucțiune protejează foaia de lucru myWorksheet cu aceeași parolă, dar permite formatarea celulelor și permite sortarea celulelor deblocate:

  myWorksheet.Protect Password:="no1gets1n", AllowFormattingCells:=True, _ 
    AllowSorting:=True

Lucrul cu obiectul ActiveSheet

Obiectul ActiveSheet returnează foaia de lucru activă. Dacă specificați un registru de lucru, este returnată foaia de lucru activă din registrul de lucru specificat.

Dacă nu este activă nicio foaie de lucru, ActiveSheet returnează Nothing. Înainte de executarea codului care va folosi o foaie activă, este o idee bună să verificați dacă există foaia activă, ca în acest exemplu:

If ActiveSheet Is Nothing Then End