Lucrul cu grupuri de controale

La proiectarea unui formular este mai simplă manipularea de grupuri de controale. Prin gruparea a două sau mai multe controale, se poate lucra cu ele unitar la mărime, poziționare, formatare sau ștergere. (De reținut că această tehnică de grupare nu are nimic în comun cu crearea de butoane radio într-un control Frame, caz în care se creează o colecție exclusivă de butoane radio.)

Gruparea controalelor

Pentru a grupa controale, acestea se selectează cu Shift+clic, Ctrl+clic sau încadrarea lor într-un dreptunghi, apoi clic dreapta și alegerea opțiunii Group din meniul contextual. Alternativ, se selectează controalele, apoi clic pe butonul Group de pe bara cu instrumente UserForm (această bară nu este afișată implicit) sau se alege Format > Group.

VBA creează un grup nou care conține controalele și plasează o bordură cu mânere în jurul controalelor, ca în figura următoare.

La selectarea unui set de controale (cu Shift+clic, Ctrl+clic sau încadrarea lor cu mausul, într-un dreptunghi), controalele sunt grupate temporar. Ele pot fi manipulate ca grup, dar după ce sunt deselectate, de exemplu cu clic pe fundalul formularului, gruparea dispare. Însă când se grupează folosind opțiunea Group, controalele rămân grupate până se degrupează cu Ungroup.

Degruparea controalelor

Pentru a degrupa controalele, clic dreapta pe oricare control din grup și se alege opțiunea Ungroup din meniul contextual. Alternativ, se selectează grupul de controale cu clic pe oricare alt control din grup, apoi clic pe butonul Ungroup de pe bara cu instrumente UserForm, sau din meniu Format > Ungroup. VBA elimină bordura cu mânere din jurul grupului și afișează borduri și mânere în jurul fiecărui control.

Redimensionarea controalelor grupate

Controalele dintr-un grup pot fi redimensionate rapid prin selectarea grupului și tragerea de mânerele din jurul grupului.

De exemplu, se poate selecta mânerul din mijloc, partea din dreapta și trage spre interior pentru a scurta controalele, ca în figura următoare.

Controalele vor fi redimensionate proporțional cu modificarea întregului grup.

Când controalele sunt grupate, se poate folosi fereastra Properties pentru a modifica rapid proprietățile care sunt comune tuturor elementelor (cum ar fi Font). Dar redimensionarea unui grup poate prezenta probleme – rezultatele pot fi nedorite. În general, redimensionarea funcționează când a fost grupat un număr de controale de același tip, ca în figura de mai sus. De exemplu, redimensionarea unui grup format din câteva butoane de comandă sau butoane radio funcționează, dar nu este o idee bună redimensionarea unui grup care conține casete text, butoane de comandă și casete combo box.

Ștergerea controalelor grupate

Un grup poate fi șters cu clic dreapta și alegerea opțiunii Delete din meniul contextual sau apăsarea tastei Delete.

Lucrul cu un Control din Grup

Chiar dacă au fost grupate mai multe controale, se poate lucra individual cu fiecare din ele, dacă este nevoie. Se selectează întregul grup. Apoi clic pe controlul care trebuie modificat. VBA afișează o bordură în jurul grupului (care indică faptul că grupul există) și o altă bordură în jurul unui anumit control, care indică că acel control este selectat.

Astfel se poate modifica controlul selectat individual ca și cum nu ar fi fost grupat. De exemplu, i se poate modifica proprietatea ForeColor, și doar la acel buton se va face modificarea. După ce se termină modificările, clic pe un alt control din grup pentru a-l selecta sau clic pe fundalul formularului pentru a deselecta controalele și a reface grupul.

Alinierea controalelor

Chiar dacă se folosește caracteristica Snap To Grid, uneori este nevoie ca să se alinieze manual controalele. Pentru aliniere, controalele trebuie să fie degrupate. Metoda cea mai simplă de aliniere a controalelor este prin selectarea a două sau mai multe controale, apoi clic dreapta pe unul dintre ele și alegerea unei opțiuni din submeniul Align: Lefts, Centers, Rights, Tops, Middles, Bottoms sau To Grid. Aceste opțiuni funcționează astfel:

    • Lefts aliniază bordurile din stânga ale controalelor.
    • Centers aliniază mijloacele pe orizontală ale controalelor.
    • Rights aliniază bordurile din dreapta ale controalelor.
    • Tops aliniază partea de sus a controalelor.
    • Middles aliniază mijloacele pe verticală ale controalelor.
    • Bottoms aliniază partea de jos a controalelor.
    • To Grid aliniază controalele la grilă.

VBA aliniază bordurile sau mijloacele la poziția curentă a controlului principal – cel care are mânere albe în jurul lui. După selectarea controalelor care vor fi aliniate, se selectează și controlul principal, astfel încât acesta să aibă mânere albe. Apoi se alege opțiunea dorită.

Se verifică dacă au fost alese opțiunile potrivite

Se verifică dacă opțiunea de aliniere aleasă are sens pentru controalele selectate. VBA va alinia controalele într-un mod neadecvat, dacă așa i se spune să facă. De exemplu, dacă se selectează o serie de butoane de opțiune sau căsuțe de text și se alege aliniere sus (Top) din submeniul Aliniere, VBA va aranja toate controalele una peste alta, ceea ce le va face inutilizabile. (Pentru a reveni la poziția dinainte, apăsați Ctrl + Z.)

Plasarea controalelor

VBA Editor oferă câteva comenzi de plasare în meniul Format:

  • În Format > Make Same Size, se pot folosi comenzile Width, Height și Both pentru a aduce două sau mai multe controale la aceeași mărime pe una din dimensiuni sau pe ambele.
  • Comanda Format > Size To Fit se folosește pentru ca VBA să aleagă mărimea potrivită pentru un element, în funcție de mărimea etichetei lui. De exemplu, acest lucru funcționează bine pentru un buton de comutare (toggle button) cu o etichetă de lungime medie, dar pe care VBA a redus-o la dimensiunile unui buton OK și nu mai poate fi utilizată.
  • Comanda Format > Size To Grid se folosește pentru a crește sau descrește mărimea unui control la cele mai apropiate puncte de pe grilă.
  • În Format > Horizontal Spacing și Format > Vertical Spacing, se pot folosi comenzile Make Equal, Increase, Decrease și Remove pentru a seta spațierea pe orizontală și verticală a două sau mai multe controale. Opțiunea Remove elimină spațiul suplimentar dintre controale, care funcționează bine pentru mai multe butoane radio așezate pe verticală (care arată bine dacă sunt mai apropiate) dar nu este o idee bună pentru butoanele de comandă (care au nevoie de puțin spațiu între ele).
  • În Format > Center In Form, se pot folosi comenzile Horizontally și Vertically pentru a centra un control sau un grup de controale în formular. Centrarea controalelor pe verticală este rar folosită, dar centrarea unui cadru (frame) sau a unui grup de butoane pe orizontală este o idee bună.
  • În Format > Arrange Buttons, se pot folosi comenzile Bottom și Right pentru a repoziționa rapid butoanele de comandă.

Ajustarea ordinii controalelor (Tab Order) dintr-un formular

Ordinea tab order dintr-un formular (sau dintr-un control cadru (Frame) aflat în formular) este ordinea în care VBA selectează controale atunci când utilizatorul mută focusarea apăsând tasta Tab (pentru a sări la următorul control) sau tastele Shift+Tab (pentru a muta la controlul anterior).

La apăsarea taste Tab, Windows mută focusarea la următorul control din acea fereastră.

La un moment dat, doar un control poate avea focusare. De exemplu, dacă un formular are cinci casete text, doar una are focus (poate fi completată) și va afișa caracterele tastate de utilizator. La fel, doar un buton dintr-un set de butoane poate avea focusare/ poate fi activ, iar când utilizatorul apasă tasta Enter, butonul activ va fi declanșat. Sau utilizatorul poate da clic pe un alt buton pentru a activa acel buton.

VBA afișează o indicație vizuală care arată controlul care este activ. În jurul butonului de comandă sau a butonului radio activ se poate vedea un cadru punctat, iar în caseta text activă se poate vedea cursorul care clipește.

Fiecare cadru adăugat la formular are o anumită ordine a controalelor pe care le conține: Cadrul însuși apare în ordinea formularului, iar controalele din cadru apar în ordine pentru acel cadru.

Ordinea pentru controalele din formular se alege astfel încât să ușureze munca utilizatorului. De obicei, aranjarea se face de la stânga la dreapta și de sus în jos.

Folosind tasta Tab, utilizatorul nu va mai trebui să treacă de la tastatură la maus pentru a alege următorul control din formular.

Acest mod de aranjare este util la completarea mai multor câmpuri prin tastarea în casete text (de exemplu casete pentru nume, adresă, telefon etc.). La apăsarea tastei Tab este activat următorul control. (Mai ușor, la apăsarea tastei Enter în caseta de text va muta la următorul control din ordinea stabilită anterior.) La final, după completarea ultimei casete text, se poate închide rapid caseta de dialog dacă butonul OK urmează imediat după ultima casetă completată.

VBA atribuie ordinea de accesare a controalelor în ordinea introducerii lor. Dar ordinea poate fi modificată ulterior. Se recomandă verificarea ordinii controalelor înainte de a pune formularul la dispoziția utilizatorilor.

Se apasă tasta F5, apoi se apasă repetat tasta Tab pentru a examina ordinea accesării controalelor. Alternativ, se poate deschide caseta de dialog Tab Order (a se vedea figura de mai jos) cu clic dreapta pe fundalul formularului sau a cadrului și alegerea opțiunii Tab Order din meniul contextual. Sau se poate selecta formularul sau cadrul și alege View > Tab Order.

De obicei, ordinea de accesare (tab order) se stabilește după crearea formularului (adăugarea ulterioară a unui control poate duce la modificarea ordinii). Iată cum se poate modifica ordinea din formular sau cadru:

  1. Dacă este nevoie, se rearanjează controalele în ordinea în care trebui să apară în lista Tab Order cu clic pe butoanele Move Up sau Move Down. Pot fi selectate mai multe butoane cu Shift+clic sau tragere peste numele lor, sau Ctrl+clic pentru a selecta controale care nu sunt unul lângă altul. (Sau se poate modifica proprietatea TabIndex din fereastra Properties a fiecărui control.)
  2. Clic pe butonul OK pentru a închide caseta Tab Order.