Despre formularele MSForms

trucuri, sfaturi si alte idei pentru imbunatatirea lucrului cu Excel
Închis
Avatar utilizator
dinu
Mesaje: 158
Membru din: Lun Mar 08, 2010 2:48 pm

Despre formularele MSForms

Mesaj de dinu » Dum Aug 08, 2010 2:41 pm

Formularele Excel, Word, poate si alte programe Office, se bazeaza pe bibleoteca MSForms. Li se spune formulare MSForms.
Access-ul lucreaza cu niste formulare proprii bazate pe elemente definite in biblioteca Access.
Intr-o aplicatie VBA un formular MSForms se insereaza cu Insert > UserForm, sau cu butonul Insert(UserForm), al doilea de pe bara Standard. Ca urmare, daca inainte nu era folosit nici un formular, in fereastra Tools > References... este inserata o referita la biblioteca MSForms, biblioteca care va aparea si in Object Browser, fiind dotata si cu Help.

Un Control este un element grafic interactiv care poate sa apara in interiorul unei ferestre, si cu care un utilizator poate sa interactioneze.
Toate controalele sunt de tip ActiveX - pot fi asociate la date care nu se pierd atunci cand este inchis fisierul, din cate am inteles eu. Vorba vine pentru ca datele sunt salvate cel mult in celule din foile de lucru, care ele ar fi niste controale ActiveX.
Daca este activa fereastra unui formular in modul Design, butonul Toolbox de pe bara Standard, deschide bara Toolbox care contine toate tipurile de controale disponibile. A nu fi confundate cu controalele care pot fi plasate pe o foaie de lucru care sunt mult mai multe si care sunt defapt niste Shape-uri, care probabil ca pot incapsula orice tip de control

design-time - atunci cand se face proiectarea formularului.
run-time - atunci cand este rulat programul, sau fereastra cu F5.

Incarcarea/descarcarea si afisarea/ascunderea unui formular la run-time

Cod: Selectaţi tot

   Load NumeFormular
   NumeFormular.Show
   NumeFormular.Hide
   Unload NumeFormular
Un formular se incarca cu Load, si se descarca cu Unload.
Show si Hide fac doar ca formularul sa fie vizibil sau invizibil, dar el exista acolo ca si cum ar fi afisat, iar utilizatorul poate sau nu sa interactioneze cu el.
Show, merge si daca formularul nu a fost incarcat, situatia in care face si incarcarea formularului.
In codul unui formular, acesta se poate referi la el insusi, ca orice alta clasa cu cuvantul cheie Me, pentru a se face singur invizibil de exemplu (Me.Show), sau pentru a se descarca (Unload Me).

Cele mai importante proprietati de stiut ale unui formular
Proprietatile formularului si cele ale controalelor sunt modificabile la design-time si/sau la run-time.
Orice modificare facuta la run-time nu se pastreaza, nu modifica cu nimic definitia formularului. Pot fi adaugate chiar si controale noi.
Pentru a reseta un formular el trebuie reincarcat dupa un Unload.

(Name) - Numele ferestrei adresabil prin cod. Modificabil doar la design-time in Fereastra de Proprietati.
Caption - Titlul ferestrei.
ShowModal - Daca sa fie modala sau nu. O fereastra modala, spre deosebire de una nemodala, face ca Excel-ul din spatele ferestrei (si alte ferestre pana la ea), sa devina "o imagine", nu se poate interactiona in nici un fel cu ele. O fereastra nemodala nu limiteaza in nici un fel acest lucru.
In plus, daca in cazul unei ferestre nemodale codul este executat in continuare dupa ce a fost deschisa fereastra, in cazul unei ferestre modale codul care urmeaza statementului care a deschis fereastra este executat numai dupa ce a fost inchisa fereastra cu Unload.

Cele mai importante proprietati de stiut ale unui control
(Name) - Numele controlului adresabil prin cod ca proprietate a ferestrei. Modificabil doar la design-time in Fereastra de Proprietati.
Enabled - Daca controlul sa fie gri, pentru ca utilizatorul sa inteleaga ca nu poate si nu e cazul ca sa interactioneze cu el, sau nu.
Locked - Controlul nu e gri, dar utilizatorul nu poate sa interactioneze cu el. Daca sa fie asa sau nu.
Visible - Daca controlul sa fie vizibil in fereastra sau nu.
Value - Proprietatea implicita. Doar numele controlului ar fi suficient pentru a se subantelege ca e vorba despre aceasta proprietate. Dar depinde de context. Pentru siguranta, si viteza codului, de facut precizarea.
Text - Valoarea care este efectiv afisata intr-un TextBox de exemplu. Din cauza unor probleme de format (data, zecimale) poate sa difere de Value.
ControlSource - Adresa unei celule dintr-o foaie de lucru, care sa fie actualizata in timp real cu valoarea controlului, si invers. Read-Write. Nu este obligatoriu de folosit aceasta proprietate.

Proprietati ale unor Controale mai speciale
ListBox si ComboBox
RowSource - Proprietate care are ca valoare adresa unui tabel dintr-o foaie de lucru (intotdeauna zona de date, fara numele pentru coloane), care reprezinta datele care apar in lista, lafel cum adresa "ControlSource" este legata de proprietatea Value, numai ca in acest caz datele pot fi modificate numai in foaia de lucru. Read-Write.
Nu este obligatoriu de folosit aceasta proprietate, caz in care lista trebuie incarcata prin cod cu metoda (membrul) AddItem. Iar AddItem nu poate sa incarce un rand intreg al unei liste cu mai multe coloane, treaba care trebuie continuata cu proprietatile List sau Column.
O lista MSForms nu poate fi definita cu un set de valori prevazut in definitia ei
BoundColumn - Atunci cand se face o selectie in lista, indica a cata coloana (numerotate de la 1) este cea dupa care se va stabili proprietatea Value a listei.
MatchRequired - Daca ComboBox-ul sa admita stabilirea unei valori alta decat cele disponibile in lista.
ListIndex - Indexul (al catelea este) elementului care are aceiasi valoare cu cea introdusa pentru ComboBox (nu neaparat prin selectare), sau al elementului selectat intr-un ListBox. Elementele sunt numarate de la zero, iar aceasta proprietate are valoarea -1 daca in lista nu este selectata nici o valoare sau daca valoarea nu este una din lista. Read-Write.
List si Column - Sant folosite pentru a citi/scrie valori in lista. Pot doar sa citeasca daca lista este legata la datele dintr-o foaie de lucru. Se zice ca merg si cu Array-uri pentru a lucra cu mai multe valori deodata.
ColumnHeads - Daca o lista are mai multe coloane, daca sa afiseze sau nu nume pentru coloane. Lista trebuie sa fie legata la datele dintr-o foaie de lucru, si e folosit primul rand de celule de deasupra zonei de date precizata in RowSource.
MultiSelect - Daca lista sa permita alegeri simple, sau multiple (mai multe optiuni in acelasi timp) si modalitatea cum s-ar face acest lucru.
OptionButton
GroupName - Dintre mai multe OptionButton-uri in mod normal este selectat numai unul, nu mai multe. Altfel ar trebui folosite CheckBox-uri. Un grup este definit de toate OptionButton-urile dintr-un container (formularul, un frame, sau o pagina dintr-un MultiPage) care au aceaisi valoare (stabilita sau nu) pentru aceasta proprietate.
CheckBox
TripleSate - Un CheckBox poate fi True, False, sau shaded/nedefinit (Null). Daca controlul poate fi Null sau nu.
MultiPage
Value - Indica/stabileste pagina curenta, la design si la run-time. Read-Write.

Utilizari ale formularelor
Formularele sunt folosite pentru a primi niste date din partea utilizatorului. Datele pot fi necesare pe parcursul executiei codului VBA fiind necesare strict acestuia, pot fi scrise in foile de lucru, sau pot fi scrise in tabele din foile de lucru - caz in care o parte din controalele formularului sunt asociate cu valorile unei inregistrari (rand din tabel).
Intr-un formular controale nu sunt restrictionate numai la o varianta de utilizare din cele de mai sus. Fiecare control poate sa aibe functionalitatea lui specifica, pe care poate chiar sa si-o schimbe pe parcursul rularii formularului daca e nevoie.

Formularele pot sa se ocupe de respectarea unor reguli de integritate la introducerea datelor in foile de lucru sau in general. Sau pot sa comande operatiuni complexe.
Se poate pune problema ca functionalitatea respectiva sa fie implementata in-place - direct pe foile de lucru.
Intr-o prima faza este necesara o proiectare dintr-un punct de vedere artistic si structural a aplicatiei, pentru a putea sti despre ce fel de functionalitate este vorba.

Se poate pune problema ca o parte din codul pe care il foloseste un formular sa fie externalizat din modulul de cod al formularului ca sa nu fie prea lung. Parca era o cantitate maxima de cod care putea fi scrisa intr-un modul.

Referinta

Închis

Înapoi la “Tips and Tricks Excel”