În multe dintre procedurile Excel, va trebui să manipulați registrele de lucru: crearea de registre de lucru noi, salvarea lor în diferite locații și formate, deschiderea, închiderea și imprimarea acestora. Pentru a realiza aceste activități, utilizați colecția Workbooks, care conține un obiect Workbook pentru fiecare registru de lucru deschis în Excel.
Pentru a crea un registru de lucru nou, utilizați metoda Add cu colecția Workbooks. Sintaxa este după urmează:
Workbooks.Add(Template)
Aici, Template este un argument opțional de tip Variant care specifică modul de creare al registrului de lucru. Următoarele subsecțiuni discută despre opțiunile disponibile.
Pentru a crea un registru de lucru necompletat (la fel ca dacă ați fi făcut clic pe fila Fișier (File) de pe Panglică, apoi ați făcut clic pe butonul New), omiteți argumentul Template:
Workbooks.Add
Noul registru de lucru primește numărul de foi specificate în caseta de dialog Opțiuni din Excel. (Clic pe eticheta File de pe panglică, apoi alegeți Options pentru a afișa secțiunea When Creating New Workbooks din caseta de dialog – veți vedea un câmp în care puteți specifica opțiunea Include This Many Sheets. Valoarea implicită este o foaie de lucru.)
Puteți obține sau seta această valoare în VBA utilizând proprietatea SheetsInNewWorkbook a obiectului Application. De exemplu, următoarea macrocomandă declară o variabilă de tip Integer, numită mySiNW, care stochează proprietatea SheetsInNewWorkbook curentă, setează proprietatea SheetsInNewWorkbook la 12, creează un registru de lucru nou (cu cele 12 foi de lucru), și apoi restabilește setarea SheetsInNewWorkbook la valoarea sa anterioară:
Sub MVBA_New_Workbook_with_12_Sheets()
Dim mySiNW As Integer
mySiNW = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 12
Workbooks.Add
Application.SheetsInNewWorkbook = mySiNW
End Sub
Pentru a crea un registru de lucru bazat pe un șablon, specificați calea completă și numele fișierului șablon. De exemplu, următoarea instrucțiune creează un registru de lucru nou bazat pe șablonul Balance Sheet.xlt într-un folder de rețea \\server\template\excel:
Workbooks.Add Template:= "\\server\template\excel\Balance Sheet.xlt"
Pentru a crea un registru de lucru bazat pe un registru de lucru existent, specificați numele complet și calea fișierului registru de lucru. De exemplu, următoarea instrucțiune creează un registru de lucru nou bazat pe registrul de lucru existent numit Personnel.xlsx în folderul C:\Business:
Workbooks.Add Template:= "C:\Business\Personnel.xlsx"
De asemenea, aveți posibilitatea să creați un registru de lucru care conține o singură diagramă, o foaie de macrocomandă sau o foaie de lucru utilizând constantele afișate în tabelul de mai jos, cu argumentul Template.
De exemplu, următoarea instrucțiune creează un registru de lucru care conține o singură foaie cu o diagramă:
Workbooks.Add Template:=xlWBATChart
Prima dată când salvați un registru de lucru, trebuie să specificați calea și numele fișierului de utilizat (aceasta este opțiunea SaveAs). După aceea, aveți posibilitatea să salvați registrul de lucru sub același nume și aceeași cale în mod implicit sau să specificați o cale diferită, nume, format sau toate trei (aceasta este opțiunea Save).
Pentru a salva un registru de lucru pentru prima dată sau pentru a salva un registru de lucru utilizând o altă cale, nume sau format diferit, utilizați metoda SaveAs. Sintaxa este următoarea:
expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout, Local)
Componentele sintaxei sunt următoarele:
VBA utilizează formatul de fișier implicit, care este specificat în caseta de dialog Options din pagina Save. (Clic pe eticheta File de pe Ribbon, apoi clic pe Options pentru a afișa caseta de dialog Options, apoi clic pe butonul Save din stânga. Apare o listă Save Files In This Format.)
Aveți posibilitatea să aflați și să setați formatul implicit de salvare utilizând proprietatea DefaultSaveFormat a obiectului Application. De exemplu, următoarea instrucțiune setează formatul implicit de salvare la xlNormal, formatul "Excel Workbook":
Application.DefaultSaveFormat = xlNormal
Fiți atenți să nu suprascrieți accidental un fișier
Când salvați un registru de lucru într-un folder, ar trebui să verificați dacă există deja în folder un registru de lucru cu același nume. Dacă există și dacă nu opriți acțiunea de salvare, VBA va suprascrie fișierul fără avertisment, cauzând pierderea datelor. Consultați Utilizarea funcției Dir pentru a verifica dacă există un fișier din secțiunea Folosirea funcțiilor încorporate (Built-In), pentru instrucțiuni despre modul în care se verifică dacă există deja un fișier care are un anumit nume.
Constante XlFileFormat pentru formate utilizate pe scară largă
De exemplu, următoarea instrucțiune salvează registrul de lucru activ în folderul curent cu numele de Salarii.xlsx și utilizând formatul implicit de salvare:
ActiveWorkbook.SaveAs FileName:="Salarii.xlsx"
Următoarea instrucțiune salvează registrul de lucru deschis denumit Schedule.xlsx sub denumirea de Building Schedule.xlsx în folderul numit \\server2\Public și în formatul Microsoft Excel 97-2003 & 5.0/95 (din Excel 2003):
ActiveWorkbook.SaveAs Filename:="\\server2\Public\Building Schedule.xlsx", _
FileFormat:=xlExcel9795
Pentru a vedea o listă completă a tuturor formatelor de fișier Excel 2016, vizitați această pagină web: http://msdn.microsoft.com/en-us/library/office/ff198017.aspx
După salvarea unui registru de lucru, îl puteți salva din nou cu același nume utilizând metoda Save. Pentru un obiect Workbook, metoda Save nu are argumente. De exemplu, următoarea instrucțiune salvează registrul de lucru numit Data Book.xlsx:
Workbooks("Data Book.xlsx").Save
Colecția Workbooks nu are o metodă Save, dar puteți salva toate registrele de lucru deschise utilizând o buclă, ca și cea afișată în următoarea subrutină:
Sub Save_All_Workbooks()
Dim myWorkbook As Workbook
For Each myWorkbook In Workbooks
myWorkbook.Save
Next myWorkbook
End Sub
Rețineți că, dacă oricare dintre registrele de lucru deschise în prezent nu au fost salvate anterior și dacă acestea includ orice macrocomenzi, se va afișa un mesaj de securitate atunci când se execută această procedură. Utilizatorilor li se spune că trebuie să fie de acord să salveze conținutul executabil potențial periculos într-un format de fișier activat pentru macrocomenzi (.xlsm). Cu toate acestea, dacă fișierul a fost deja salvat cu extensia .xlsm, nu se afișează niciun mesaj. Dacă doriți să suprimați astfel de mesaje, puteți introduce următorul cod la începutul acestei proceduri:
Application.DisplayAlerts = False
Cu toate acestea, asigurați-vă că setați proprietatea DisplayAlerts înapoi la True cât mai curând posibil în cod. Acest mesaj de avertizare special este destul de util ca un memento pentru utilizator, astfel încât probabil nu va dori să-l suprime.
Accesul VBA la OneDrive, Dropbox sau la un alt sisteme de stocare în cloud este destul de ușor. Se deschide sau se salvează fișierul, în folderul OneDrive sau Dropbox.
Singurul lucru de reținut este calea la fișier, care arată cam așa.: "C:\Users\ NumeUtilizator\OneDrive\ExcelToCloudTest", înlocuind NumeUtilizator cu numele dvs.
Acest exemplu salvează documentul curent în OneDrive. Pentru că aceasta este o sursă de erori destul de multe, repet: se schimbă numele NumeUtilizator, cu numele dvs. în calea pentru fișier:
ActiveWorkbook.SaveAs ("C:\Users\NumeUtilizator\OneDrive\ExcelCloudTest")
Pentru a salva în Dropbox, este la fel:
ActiveWorkbook.SaveAs ("C:\Users\NumeUtilizator\DropBox\ExcelCloudTest")
Accesul VBA la OneDrive, Dropbox sau la un alt sisteme de stocare în cloud este destul de ușor. Se deschide sau se salvează fișierul, în folderul OneDrive sau Dropbox.
Singurul lucru de reținut este calea la fișier, care arată cam așa.: "C:\Users\ NumeUtilizator\OneDrive\ExcelToCloudTest", înlocuind NumeUtilizator cu numele dvs.
Acest exemplu salvează documentul curent în OneDrive. Pentru că aceasta este o sursă de erori destul de multe, repet: se schimbă numele NumeUtilizator, cu numele dvs. în calea pentru fișier:
ActiveWorkbook.SaveAs ("C:\Users\NumeUtilizator\OneDrive\ExcelCloudTest")
Pentru a salva în Dropbox, este la fel:
ActiveWorkbook.SaveAs ("C:\Users\NumeUtilizator\DropBox\ExcelCloudTest")
Pentru a deschide un registru de lucru, folosiți metoda Open cu colecția Workbooks. Sintaxa este următoarea:
expression.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
Componentele sintaxei sunt următoarele:
Nu includeți parole în procedurile dvs.
De obicei, cel mai bine este să evitați introducerea parolelor în cod, deoarece este posibil ca să le citească și alte persoane.
Valori pentru argumentul UpdateLinks
De exemplu, următoarea instrucțiune deschide registrul de lucru numit Expenses.xlsx stocat în folderul C:\Business fără actualizarea legăturilor:
Workbooks.Open Filename:= "C:\Business\Expenses.xlsx", UpdateLinks:=0
Următoarea instrucțiune deschide registrul de lucru numit Plan.xlsx stocat în folderul D:\Planning, furnizând și parola pentru deschiderea registrului de lucru:
Workbooks.Open Filename:="D:\Planning\Plan.xlsx", Password:="s@cur1ng!"
Următoarea instrucțiune deschide fișierul text numit Data13.txt din folderul z:\transfer folosind un semn de exclamare (!) ca și caracter delimitator:
Workbooks.Open _
Filename:="z:\transfer\Data13.txt", Format:=6, Delimiter:="!"
Pentru a închide un registru de lucru, utilizați metoda Close cu obiectul Workbook corespunzător. Sintaxa este următoarea:
expression.Close(SaveChanges, Filename, RouteWorkbook)
Componentele sintaxei sunt următoarele:
De exemplu, următoarea instrucțiune închide registrul de lucru activ fără a salva modificările:
ActiveWorkbook.Close SaveChanges:=False
Închiderea registrelor de lucru deschise
Pentru a închide toate registrele de lucru deschise, utilizați metoda Close cu colecția Workbooks:
Workbooks.Close
Metoda Close nu are argumente. Excel vă solicită să salvați orice registru de lucru care conține modificări nesalvate. În cazul în care astfel de solicitări vor fi incomode într-o procedură, utilizați o buclă (de exemplu,, o buclă For Each...Next cu colecția Workbooks) pentru a închide fiecare registru de lucru individual, folosind argumentul SaveChanges pentru a controla dacă Excel salvează sau elimină modificările nesalvate.
Partajarea unui registru de lucru
Pentru a determina dacă un registru de lucru este partajat, verificați proprietatea MultiUserEditing. Aceasta este o proprietate booleană doar în citire.
Pentru a partaja un registru de lucru, utilizați metoda SaveAs (discutată în "Salvarea unui registru de lucru pentru prima dată sau ca fișier diferit", descris mai sus) care salvează fișierul utilizând valoarea xlShared pentru argumentul AccessMode.
De exemplu, următoarele declarații partajează registrul de lucru numit Brainstorming.xlsx dacă nu este deja partajat:
With Workbooks("Brainstorming.xlsx")
If MultiUserEditing = False Then
.SaveAs Filename:=.FullName, AccessMode:=xlShared
End If
End With
Pentru a proteja un registru de lucru, utilizați metoda Protect cu obiectul Workbook corespunzător. Sintaxa este următoarea:
expression.Protect(Password, Structure, Windows)
Componentele sintaxei sunt:
De exemplu, următoarea instrucțiune protejează structura și ferestrele registrului de lucru activ cu parola 0llsecurd:
ActiveWorkbook.Protect Password:="0llsecurd", Structure:=True, Windows:=True
Puteți proteja registrele de lucru atât împotriva scrierii (editării), cât și a citirii
Pe lângă protejarea unui registru de lucru împotriva modificărilor, îl puteți proteja împotriva deschiderii și vizualizării - descrierea mai jos, în „Setarea parolelor și a recomandărilor doar în citire pentru un registru de lucru”.
Obiectul ActiveWorkbook returnează un obiect Workbook care reprezintă registrul de lucru activ (oricare registru de lucru care are în prezent focalizarea în fereastra Excel). Obiectul ActiveWorkbook se comportă ca un obiect Workbook și este foarte util în macrocomenzile pe care utilizatorii le execută după deschiderea registrului de lucru pe care doresc să îl manipuleze.
Dacă nu este deschis niciun registru de lucru, nu există niciun obiect ActiveWorkbook, astfel încât orice cod care încearcă să utilizeze obiectul ActiveWorkbook returnează o eroare. Deci, este o idee bună să verificați dacă este deschis cel puțin un registru de lucru înainte de a încerca să executați cod care presupune că există un registru de lucru activ. Una dintre opțiuni este să verificați dacă obiectul ActiveWorkbook nu este Nothing înainte de a rula codul, ca în exemplul următor:
If ActiveWorkbook Is Nothing Then
MsgBox "Va rog deschideti un registru de lucru si clic în el inainte de a executa aceasta macrocomanda." _
& vbCr & vbCr & "Aceasta macrocomanda se va inchide.", _
vbOKOnly + vbExclamation, "Niciun registru de lucru deschis "
End
End If
De asemenea, este o idee bună să verificați dacă registrul de lucru activ este cel în care va fi executat codul. Această problemă poate apărea cu ușurință atunci când o macrocomandă începe cu registrul de lucru activ și apoi creează un registru de lucru nou pentru a lucra. Noul registru de lucru devine registrul de lucru activ și, din acest moment, codul poate accesa registrul de lucru greșit.
Dacă există vreo îndoială cu privire la registrul de lucru cu care lucrați, declarați o variabilă de obiect Workbook și utilizați acea variabilă obiect în cod, în locul obiectului ActiveWorkbook.
De exemplu, următoarele declarații declară o variabilă obiect Workbook și îi atribuie obiectul ActiveWorkbook. Acum, codul ulterior poate funcționa cu variabila obiect, care nu se va schimba cu un alt registru de lucru:
Dim myWorkbook As Workbooks
Set myWorkbook = ActiveWorkbook
With myWorkbook
'aici se scriu comenzile
End With