sâmbătă, 20 iulie 2013

Figuri (Shapes) colorate 2/2





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.
În exemplul nostru aceste valori sunt concentrate în pagina date.

Butonul

Permite declanşarea unei acţiuni, pornirea unui macrou, inserarea lui se face asemănător cu Scroll Bar-ul.


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ă.


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

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):

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

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.

În stânga jos din ecran găsim un buton



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