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.
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:
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
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
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:
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"
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:
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
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