VBA
Programul VBA asociat cu acest fişier cuprinde două componente
esenţiale: elemente de comandă şi codul sursă.
Elemente de comandă
In paginile cu figurile desenate, de ex. cerc , sunt mai multe Scroll Bar-uri cu care putem modifica
proprietăţile desenului.
Scroll Bar-ul poate transmite o valoare situată între un minim şi
un maxim intr-o celulă, de asemenea poate fi folosi ca element de comandă,
adică, modificarea valorii sale să pornească execuţia unui macrou.
Inserarea Scroll Bar-ului se face din Developer --- Insert
Unde alegem din Form
Controls --- Scroll Bar.
După inserare trebuie să definim proprietăţile a
elementului de comandă, pentru aceasta facem un click dreapta pe Scroll Bar şi din meniul local alegem Format Control şi Control
Definim parametrii ca, valoarea minimă şi cea maximă, pasul
(cât se modifică valoarea la un click pe săgeata din stânga sau dreapta), pasul
mare(cât se modifică valoarea la un click pe bara între cursor şi săgeată) şi
celula la care este legat acest element.
Valoarea minimă şi maximă precum şi avansul depinde de natura aplicaţiei unde le folosim, în exemplul nostru valoarea minimă este 0, iar valoarea maximă pentru culori este 255 (atât este maximul de valoare la scala RGB), pentru transparenţă în schimb este de 100. Celula de legătură este proprietatea esenţială, aici transferă Scroll Bar-ul valoarea sa şi de aici putem prelua aceasta valoare pentru programul nostru.
Valoarea minimă şi maximă precum şi avansul depinde de natura aplicaţiei unde le folosim, în exemplul nostru valoarea minimă este 0, iar valoarea maximă pentru culori este 255 (atât este maximul de valoare la scala RGB), pentru transparenţă în schimb este de 100. Celula de legătură este proprietatea esenţială, aici transferă Scroll Bar-ul valoarea sa şi de aici putem prelua aceasta valoare pentru programul nostru.
În exemplul nostru aceste valori sunt concentrate în pagina date.
Butonul
Pentru
a asocierea cu un macrou facem un click dreapta pe un buton, din meniul local
alegem Assign Macro si alegem subrutina cu care asociem butonul nostru.
Observaţie
Un buton poate fi asociat numai cu un macrou, dar un macrou poate fi asociat cu mai multe elemente de comandă.
Un buton poate fi asociat numai cu un macrou, dar un macrou poate fi asociat cu mai multe elemente de comandă.
Partea de programare
Pentru a accesa editorul VBA folosim shortcut-ul ALT+F11.Despre editorul VBA aici aveţi un articol.
Pentru a utiliza VBE avem nevoie să fie vizibile minim următoarele: Project Explorer, Properties Window şi evident Code Window. Dacă vreunul nu este vizibil, din View le putem afişa.
În Project Explorer
avem următoarele:
Fiecărei pagini (sheet) îi corespunde un obiect în programul
nostru, ce (cerc), ov (oval)….. Aici putem scrie
subrutinele legate de evenimente din fiecare pagină. Este un obiect ThisWorkbook unde scriem rutinele
asociate de evenimente la nivel de fişier.
Mai jos observăm nişte structuri numite module, care sunt de
fapt destinate macrourilor noastre.
Şi obiectele sheet şi modulele pot să fie păstrare cu
denumirea lor naturală de gen Sheet1(Sheet1)
sau putem să le numim după preferinţele noastre. Observăm că numele din
paranteze este denumirea pe care le am folosit în Excel pentru aceste pagini,
iar denumirea în VBA putem modifica prin suprascrie în Properties Window.
Putem accesa, pentru un obiect. Properties Window dacă în Project
Explorer îl selectăm.
Vă recomand să folosiţi denumiri personalizate pentru
sheet-uri cât şi pentru module.
Pentru denumirea în VBA pentru fiecare pagină folosesc 1-2
litere din denumirea paginii din Excel, iar macrourile scrise încerc să grupez
şi să le denumesc după destinaţia lor.
În modulul desenezCerc
avem două subrutine, asociate fiecare cu un buton, unul dintre ele
desenează cercul propriu-zis, a doua readuce proprietățile cercului la valorile
iniţiale.
În prima parte a rutinei cerc
Dim a, b, d As Integer
Dim fondR, fondG, fondB, fondTr As Integer
Dim linieR, linieG, linieB, linieTr, linieGr, linieTip, linieTipa As Integer
Dim fondR, fondG, fondB, fondTr As Integer
Dim linieR, linieG, linieB, linieTr, linieGr, linieTip, linieTipa As Integer
definesc variabilele locale folosite. Pentru o citire mai
uşoară a programului (gândiţi-vă că un program de complexitate medie uneori
poate avea sute sau mii de linii de cod) încerc să folosesc denumiri sugestive
vezi a, b, d ca şi în pagina noastră
din Excel, fondR de la componenta R din culoarea de fond….. VBA permite să folosim litere mari sau mici
în denumirea variabilelor. Încerc să folosesc în general litere mici, dar în
fiecare denumire folosesc şi o literă mare. După ce am
definit variabila, chiar dacă în continuarea liniilor folosesc numai caractere
mici, editorul îmi modifică automat literele mici în mare in cazul dacă
anterior am definit această variabilă. Parcurgând liniile de cod astfel
pot să observi mai uşor o denumire ratată din eroare de tastare.
În următoarele linii:
a = Cells(1, 5): b = Cells(2, 5):
d = Cells(3, 5):
fondR = da.Cells(2, 3): fondG = da.Cells(3, 3): fondB = da.Cells(4, 3): fondTr = da.Cells(5, 3):
linieR = da.Cells(6, 3): linieG = da.Cells(7, 3): linieB = da.Cells(8, 3): linieTr = da.Cells(9, 3):
linieGr = da.Cells(10, 3): linieTip = da.Cells(11, 3): linieTipa = da.Cells(12, 3):
fondR = da.Cells(2, 3): fondG = da.Cells(3, 3): fondB = da.Cells(4, 3): fondTr = da.Cells(5, 3):
linieR = da.Cells(6, 3): linieG = da.Cells(7, 3): linieB = da.Cells(8, 3): linieTr = da.Cells(9, 3):
linieGr = da.Cells(10, 3): linieTip = da.Cells(11, 3): linieTipa = da.Cells(12, 3):
preiau valorile din paginile mele din Excel.
Observaţi că pot să
scriu mai multe linii cod (instrucţiuni) într-o singură linie dacă le separ cu :
Dacă preiau date din altă pagină din care lansez în execuție subrutina mea, în instrucţiunea de atribuire trebuie să specific şi sheet-ul fondR = da.Cells(2, 3) - variabila fondR va prelua conţinutul celulei C:2 din pagina da adică date.
Dacă preiau date din altă pagină din care lansez în execuție subrutina mea, în instrucţiunea de atribuire trebuie să specific şi sheet-ul fondR = da.Cells(2, 3) - variabila fondR va prelua conţinutul celulei C:2 din pagina da adică date.
Dacă preiau date din acelaşi pagină din care lansez în
execuţie subrutina nu este obligatorie aceasta specificare.
ActiveSheet.Shapes("cerc1").Delete
ActiveSheet.Shapes.AddShape(msoShapeOval, a, b, d, d).Name = "cerc1"
ActiveSheet.Shapes.AddShape(msoShapeOval, a, b, d, d).Name = "cerc1"
Aceste instrucţiuni şterg cercul anterior şi adaugă un cerc
nou.
Următoarele două instrucţiuni With .. End With modifică proprietăţile
cercului după specificarea noastră.
Rutina cercReset readuce
toţi parametrii cercului la anumite valori prestabilite după care redesenează cercul.
Pagina oval este
total asemănătoare cu cea despre care am vorbit anterior, cu următoarele
diferenţe, la fiecare Scroll Bar am
asociat rutina desenezOval astfel
modificarea unui parametru îmi va actualiza desenul. În partea cu VBA
deosebirea este că datele sunt culese din tabel dintr-o altă coloană.
Pagina dreptunghi s-au mai adăugat încă patru Scroll Bar-uri pentru dimensiune şi
poziţie şi s-a schimbat denumire obiectului desenat din msoShapeOval în msoShapeRectangle.
În cilindru nici
o schimbare.
Rutina
de colorare şi schimbare de dimensiuni poate fi folosite şi la alte obiecte
care ne pune la dispoziţie Excelul.
În rutina trebuie să schimbăm doar denumirea obiectului în
linia
ActiveSheet.Shapes.AddShape(msoShapeRectangle, a, b, c,
d).Name = "dreptU"
Această denumire putem afla cel mai simplu dacă înregistrăm
un macrou cu inserarea obiectului într-o pagină Excel.
Click pe ea şi pornim înregistrarea, păstrăm denumirea
oferită automat de Excel
Observăm că butonul şi a schimbat forma
Mergem pe Insert -- Shapes alegem figura care ne place şi desenăm
figură într-un sheet, după care oprim înregistrarea cu butonul albastru.
Accesăm editorul VBA şi într-un modul i o să găsim un macrou de genul
Sub Macro2()
' Macro2 Macro
Sheets("Sheet1").Select
ActiveSheet.Shapes.AddShape(msoShapeFrame,
846.75, 242.25, 177.75, 155.25).Select
End Sub
Denumirea obiectul nostru
este msoShapeFrame.
Această denumire o folosim mai departe în programul nostru.
Niciun comentariu:
Trimiteți un comentariu