Crearea unei casete de dialog personalizate

Pentru a construi o casetă de dialog personalizată sau a unei ferestre în VBA, se folosește un obiect vizual numit formular utilizator - user form. Un formular este ca o foaie goală pe care se pot plasa controale, cum ar fi casete de bifare, butoane, casete text, pentru a construi o casetă de dialog.

Formularul pentru un utilizator conține propriul cod în care programatorul scrie cod pentru a administra controalele din formular. Se poate atașa cod la oricare din controale, sau la formular, iar codul este stocat în fereastra Code. Se poate lucra în cod la fel ca în macrocomenzi. Se poate rula și testa formularul ca în orice macrocomandă (apăsând tasta F5 cu formularul selectat), iar VBA Editor va executa codul din formular.

Se poate afișa un formular (o fereastră de dialog) pentru interacțiunea cu utilizatorul, cu ajutorul căruia se pot obține informații de la utilizator, pentru a le manipula ulterior cu codul VBA. Codul care este scris pentru formular este numit cod din spatele - behind formularului. Utilizatorul vede și interacționează cu un formular, dar în spatele acestuia este scris cod care reacționează în mod inteligent la datele introduse de utilizator.

Formularul este un obiect și poate conține alte obiecte care pot fi manipulate individual.

Formularele pentru utilizatori nu sunt întotdeauna casete de dialog

Unele formulare pot să nu fie casete de dialog. Diferența dintre o fereastră de dialog și o fereastră este imprecisă, dar de obicei, un formular care poate fi redimensionat este definit ca fereastră, iar o fereastră de dialog are dimensiuni fixe. Unele casete de dialog, cum ar fi caseta de dialog Find And Replace din Word, au o parte ascunsă pe care utilizatorul o poate afișa (în caseta de dialog Find And Replace, cu clic pe butonul More).

Dar înafară de această redimensionare simplă, dimensiunile casetelor de dialog sunt fixe. Programatorul poate crea o gamă variată de formulare de complexitate și dimensiuni diferite.

De exemplu, poate fi creată o casetă de dialog simplă cu două butoane: OK și Cancel. Pot fi setate proprietăți individuale pentru fiecare obiect – pentru clic pe butonul Cancel sau un mesaj ScreenTip (sau ToolTip) care se afișează când utilizatorul mută cursorul mausului peste butoane. (Mesajele ToolTip ajută utilizatorul să înțeleagă componentele formularului.) Ideea este de a considera componentele formularului – Controls ca obiecte. Controalele sunt obiecte vizuale, dar ca și obiectele programabile, controalele au membri, cum ar fi proprietățile.

Majoritatea proprietăților unui obiect pot fi specificate în momentul proiectării formularului sau în timpul executării lui. De exemplu, la proprietatea Value a unui control pentru o casetă de bifare - check-box, codul poate fi setat la True pentru a afișa acea casetă bifată sau la False pentru a o afișa nebifată. Proprietatea Value poate fi aleasă în trei moduri diferite:

  • La construirea formularului, în fereastra Properties. De exemplu, caseta poate fi implicit bifată la afișarea formularului.
  • Poate fi scris cod care să seteze starea casetei de bifare înainte de a afișa formularul, în timpul execuției macrocomenzii.
  • Poate fi scris cod care să seteze caseta în timp ce utilizatorul interacționează cu formularul. Utilizatorul poate bifa sau debifa caseta, dar aceasta se poate face și folosind cod.

Proiectarea unei casete de dialog

Realizarea unei casete de dialog este relativ simplă. Unii programatori "schițează" interfața de utilizator dintr-o casetă de dialog prin tragerea controalelor din Toolbox în formular, apoi poziționând controalele ca să arate bine și, la final, modificându-le proprietățile.

Alți programatori adoptă o abordare mai metodică și mai întâi planifică ce au nevoie să includă în caseta de dialog. Apoi schițează pe o hârtie o diagramă a casetei de dialog pentru a avea o idee despre locul în care va fi plasat fiecare element (locul controalelor din formular).

Folosirea unui proiect existent de casetă de dialog

O altă opțiune este de a folosi un șablon existent dintr-o altă aplicație. Această modalitate reduce efortul de proiectare și evită reinventarea roții, ducând la realizarea unei casete de dialog pe care utilizatorii o înțeleg și cu care sunt familiarizați.

Inserarea unui formular

După planificarea formularului, prima etapă de creare a unei casete de dialog este inserarea unui formular în șablon sau document:

  1. Se apasă Alt+11 pentru a afișa Visual Basic Editor.
  2. În fereastra Project Explorer, clic pe butonul din dreapta peste proiect și alegerea opțiunii Insert > UserForm din meniul contextual.

Alte metode de adăugare a unui formular

Un formular poate fi inserat și cu clic pe butonul Insert UserForm din partea stângă a barei cu instrumente Standard din VBA Editor.

Visual Basic Editor deschide un formular nou ca în figura de mai jos, numit UserForm1 (sau următorul număr valabil, dacă proiectul mai conține și alte formulare).

Visual Basic Editor mai afișează și caseta Toolbox. (Dacă aceasta a fost închisă anterior, ea va fi probabil ascunsă. Pentru a o reafișa, se alege View > Toolbox sau clic pe butonul Toolbox din partea dreaptă de pe bara cu instrumente Standard.)

VBA inserează automat formularul pentru utilizator în obiectul Forms (colecția de formulare) pentru proiect. Dacă proiectul ales nu conține deja o colecție Forms, VBA adaugă una care va conține noul formular.Obiectul Forms va fi afișat în fereastra Project Explorer.

Alegerea setărilor pentru grila formularului

Visual Basic Editor afișează o grilă în formular, pentru a ușura poziționarea controalelor în caseta de dialog și a le alinia corect.

Pentru a ascunde grila sau a anula alinierea automată a controalelor din VBA se procedează astfel:

1. Tools > Options pentru a afișa caseta de dialog Options.

2. Clic pe eticheta General pentru a afișa pagina General (figura de mai jos).

3. Se alege una din opțiunile:

a. Se debifează caseta Show Grid pentru a ascunde grila. (Grila funcționează în continuare, dar este invizibilă.)

b. Se debifează caseta Align Controls To Grid pentru a dezactiva alinierea. Astfel, VBA reduce mărimea grilei de la 6 la 3 sau 4.

c. Se modifică numărul de puncte din casetele Width și Height pentru a ajusta mărimea unităților pentru grilă.

4. Clic pe butonul OK pentru a închide caseta de dialog Options și a aplica modificările alese.

CONVENȚII DE DENUMIRE ÎN VISUAL BASIC FOR APPLICATIONS

Atribuirea de nume la controale în VBA este similară cu atribuirea de nume pentru variabile. Numele pentru controale pot fi de maxim 40 de caractere, trebuie să înceapă cu o literă și să conțină orice combinație de litere, cifre și caractere underscore. Numele nu pot conține spații sau simboluri, iar fiecare nume trebuie să fie unic în acel context – de exemplu, fiecare formular trebuie să aibă un nume unic în proiect, dar un control dintr-un formular poate avea același nume cu un control din alt formular.

Se pot folosi convenții pentru numele obiectelor din VBA pentru a le face mai clare și mai ușor de înțeles. De exemplu, tipul variabilei poate fi inclus ca prefix în nume: str, Ing, int etc. La fel, prefixele se pot referi la controale: txt pentru control de tip text box etc.

Iată un exemplu care folosește prefixe convenționale pentru câteva controale:

 Private Sub cmbSelectEmployee_Change()
lblEmployeeName = cmbSelectEmployee.Text 
fraStep2.Enabled = True
lblInstructions = "Introduceti text in caseta text de la pasul 2. " & _
"De exemplu, puteți introduce date biografice " & _
"ale angajatului, detalii despre functia ocupata, " & _
"sau contributii ale angajatului." 
cmdClearEmployeeName.Enabled = True 
End Sub

Unele convenții de denumire populare pentru cele mai folosite obiecte VBA sunt afișate în lista de mai jos. Lista include numele controlului, prefixul standard și un exemplu de denumire în cod:

Ca și la numele variabilelor, convențiile de denumire pentru controale încep cu 3 litere mici, apoi continuă cu o literă mare – prima literă a numelui obiectului, pentru a fi mai ușor de citit. De exemplu, o casetă text în care utilizatorii își vor scrie numele, ar putea fi denumită txtLastName.

Convențiile de denumire pot părea formale la început și uneori se încearcă evitarea lor. Dar în cazul în care macrocomanda va fi distribuită și altor programatori, se recomandă folosirea acestor convenții. În plus, aceste convenții ajută la depanare. Convențiile sunt o altă modalitate de a face codul mai ușor de citit.

Redenumirea unui formular

Numele implicit al formularului (UserForm1) poate fi modificat cu un nume mai sugestiv, astfel:

1. Dacă fereastra Properties nu este afișată, se apasă tasta F4 pentru a o afișa. Figura de mai jos afișează cele două pagini ale ferestrei Properties: Alphabetic și Categorized. În Alphabetic, proprietățile obiectului selectat sunt afișate în ordine alfabetică. În Categorized sunt afișate aceleași proprietăți separate pe categorii: Appearance, Behavior, Font, Misc., Picture și Position. (Unele controale au mai multe categorii.) O categorie poate fi extinsă cu clic pe semnul plus (+) pentru a vedea proprietățile categoriei și poate închisă cu clic pe semnul minus (-). Se selectează eticheta Alphabetic.

Opțiunea Categorized este mai greu de folosit, deoarece unele proprietăți sunt mai greu de găsit. De exemplu, proprietatea Caption, este atribuită categoriei Appearance, dar proprietatea (Name) se află în colecția Misc. Pentru a lucra mai ușor, se recomandă folosirea opțiunii Alphabetic.

Se poate folosi una din listele Alphabetic sau Categorized din fereastra Properties.

2. Se verifică dacă în antetul listei (în partea de sus a ferestrei Properties) este afișat numele implicit al formularului. Dacă nu, se selectează formularul din lista derulantă.

3. Se selectează numele implicit al formularului (de obicei UserForm1 sau UserForm2) din celula din dreapta celulei Name (cu dublu clic se poate selecta rapid tot numele). Se tastează un alt nume, mai sugestiv pentru formular. Numele poate fi oricare, dar trebuie să respecte limitările standard VBA:

  • Trebuie să înceapă cu o literă.
  • Poate conține litere, cifre și caractere underscore, dar fără spații sau simboluri.
  • Poate avea maxim 40 de caractere.

4. Clic pe celula Caption pentru a selecta numele implicit al formularului și se tastează titlul (caption) formularului – acesta este textul pe care utilizatorul îl va vedea în bara de titlu a casetei de dialog. Acest nume nu are restricții de lungime. Se poate introduce și un nume mai lung decât încape în bara de titlu, dar VBA îl va trunchia și va pune la final trei puncte ... după lungimea maximă de afișare. În momentul scrierii titlului, acesta apare automat și pe bara de titlu, pentru a estima lungimea textului pentru acel formular.

5. Se apasă tasta Enter sau clic în altă parte a ferestrei Properties (sau în spațiul ocupat de fereastra Visual Basic Editor) pentru a alege (face oficial) numele formularului. (Atribuirea de nume la controale se face la fel ca atribuirea de nume la formulare.)

Cum se rezolvă eroarea “NAME CONFLICTS WITH EXISTING MODULE”

Dacă apare eroarea “Name name conflicts with existing module, project, or object library”, este posibil ca numele atribuit formularului să existe și să fie deja atribuit altui element.

Adăugarea de controale la formular

După redenumirea formularului, se adaugă controale din Toolbox. VBA afișează automat caseta Toolbox atunci când formularul este activ, dar o poate afișa și când formularul este inactiv, alegând View > Toolbox.

Șteregerea controlului “Roaming Office” din VBA 2013

În caseta Toolbox din VBA 2013 se află un control numit RoamingOffice control. Controlul nu se află în VBA 2016 Toolbox. Este un buton mic, hașurat cu gri, lângă controlul Image. Butonul nu va fi folosit și, dacă există, poate fi eliminat din caseta Toolbox 2013 cu clic-dreapta pe buton, apoi din meniul contextual, alegerea opțiunii Delete RoamingOffice.


Iată ce fac butoanele din Toolbox:

Select Objects Primul control, ca o săgeată, are un scop special și e posibil să nu fie folosit deloc. Controlul nu apare în niciun formular – nu poate fi tras în formular. Scopul lui este de a readuce cursorul mausului la modul Selection. Oricum, cursorul mausului revine automat la modul Selection după ce a mutat un control în formular. De obicei, se face clic pe butonul Select Objects doar dacă programatorul a selectat un control, apoi s-a răzgândit și nu mai vrea să îl folosească, deci trebuie să readucă cursorul la starea normală. Alternativ, cu dublu clic pe un control (de exemplu, pe check box), se pot adăuga repetat mai multe controale de același fel. (La fiecare clic pe formular, este adăugat un nou control, atâta timp cât Editorul își menține această stare.) Pentru a opri adăugarea repetitivă, clic pe butonul Select Objects.

Label Creează o etichetă - label, al cărei text este folosit pentru a identifica o parte din caseta de dialog sau pentru a explica informațiile pe care utilizatorul trebuie să le introducă în caseta de dialog.

TextBox Creează o casetă text (numită și edit box), un câmp în care utilizatorul poate introduce text. Controlul poate fi folosit și pentru a afișa text informativ pentru utilizator sau pentru a furniza text pe care utilizatorul să îl copie pentru a-l adăuga în altă parte. Controlul text box poate conține o linie (implicit) sau mai multe linii și poate avea o bară de derulare orizontală, una verticală sau ambele.

ComboBox Creează o casetă de tip combo box, un control care combină un control text box cu un control list box. Utilizatorul poate alege o valoare din listă sau poate introduce o valoare nouă în text box.

ListBox Creează un control list box, care afișează un număr de valori. Utilizatorii pot alege o valoare din listă dar nu pot adăuga o nouă valoare (spre deosebire de combo box). Controlul list box este bun pentru prezentarea unui set de date.

CheckBox Creează o casetă de bifare și o etichetă cu scop informativ. Utilizatorul poate bifa sau debifa caseta, pentru a activa sau dezactiva o anumită acțiune.

OptionButton Creează un buton pentru opțiuni (numit și radio button) și o etichetă cu scop informativ pentru a arăta rolul acelui buton. Acest buton este de obicei un cerc care conține un punct negru atunci când este selectat. Utilizatorul poate selecta doar o opțiune din grupul de butoane radio. (Numele de buton radio vine de la radiourile cu butoane; se putea selecta doar un buton la un moment dat.)

ToggleButton Creează un buton de comutare, un buton care arată dacă un element este selectat sau nu. Un buton de comutare poate fi definit ca având două setări, cum ar fi Deschis/Închis sau Da/Nu. La buton se poate adăuga o imagine, care oferă o modalitate grafică de a permite utilizatorului să facă o alegere.

Frame Creează un cadru, o zonă din formular sau o casetă de dialog înconjurată de o linie subțire și o etichetă cu scop informativ. Cadrele (cunoscute și ca cutie pentru grup - group boxes) pot fi folosite pentru a grupa diferite elemente în formular. Cadrele grupează vizual elementele, dar le pot separa și logic. De exemplu, VBA tratează un grup de butoane radio dintr-un cadru separat față de alte butoane radio aflate în alte cadre sau în altă zonă a formularului. Această separare face mai ușoară folosirea seturilor de butoane radio din formular.

CommandButton Creează un buton de comandă. Acesta este, de obicei, un buton obișnuit de Windows pe care utilizatorul face clic pentru a comunica opțiunile alese. Majoritatea casetelor de dialog conțin butoanele de comandă OK și Cancel, sau Open și Cancel, sau Save, sau Apply și Close.

TabStrip Creează o altă foaie în formular pentru a afișa mai multe seturi de date în același set de controale. Foile din formular sunt utile mai ales pentru prezentarea înregistrărilor dintr-o bază de date pentru verificare sau modificare: fiecare înregistrare din baza de date conține aceleași câmpuri pentru informare, astfel încât pot fi afișate în același grup de controale. Controlul tab strip oferă o modalitate simplă de a naviga printre înregistrări.

MultiPage Creează un control de tip multipagini pentru afișarea casetelor de dialog multipagini care au șabloane diferite pe fiecare pagină. Un exemplu de casetă de dialog multipagini este caseta de dialog Options (Tools > Options), care are mai multe pagini (adesea referite incorect ca tab-uri) în majoritatea aplicațiilor Office.

ScrollBar Creează o bară de derulare de sine stătătoare. Barele de derulare sunt rar folosite în casetele de dialog. Casetele combo și listele au bare de derulare predefinite.

SpinButton Creează un control cu un buton ”rotativ” care se folosește împreună cu un alt control, de exemplu o casetă text. Aceste butoane (cunoscute și ca spinners) sunt mici, dreptunghiulare cu câte o săgeată îndreptată în sus și în jos (sau spre stânga și dreapta). Aceste butoane se folosesc la afișarea de valori secvențiale cu intervale consistente care să se încadreze între anumite limite, cum ar fi timp sau dată. De exemplu, pentru a utilizatorul să crească sau să scadă prețul dintr-o casetă cu pași din 25 în 25 de bani, se poate folosi un buton spinner pentru a ajusta prețul în loc să fie lăsat utilizatorul să tasteze direct în caseta text.

Image Creează un control de tip imagine pentru afișarea unei imagini într-un formular. De exemplu, se poate folosi un control imagine pentru afișarea unui logo sau a unei imagini. (Pentru a afișa o imagine, o textură sau alt element grafic în fundalul formularului, se setează proprietatea Picture a formularului.)

Adăugarea de controale la caseta Toolbox din Visual Basic Editor

Caseta Toolbox conține instrumentele de bază furnizate de VBA. Toolbox poate fi modificată prin adăugarea altor controale, crearea de pagini suplimentare pentru controale, mutarea controalelor de pe o pagină pe alta a casetei și crearea de controale particularizate pentru a evita ajustarea repetată a proprietăților la unele controale.

Clic pe unul dintre controale din Toolbox pentru a-l selecta. Apoi clic pe formular pentru a insera controlul din formular. VBA plasează colțul din stânga sus al controlului unde s-a făcut clic. Controlul se va alinia la grila formularului (excepție atunci când s-a dezactivat caracteristica Align Controls To Grid descrisă mai sus).

La clic pe formular, VBA plasează controlul ales, la mărimea standard. Dacă este activată caracteristica Align Controls To Grid (implicit), VBA aliniază automat controlul la grila formularului.

Controlul poate fi redimensionat prin tragere de mânerele din jurul lui (pătratele albe). La redimensionare, cursorul mausului devine o săgeată dublă. La tragerea unui mâner aflat pe colț, VBA redimensionează controlul pe două direcții. Tragerea unui mâner aflat pe mijlocul unei laturi va redimensiona controlul doar pe acea latură. În ambele cazuri, VBA afișează o linie întreruptă care indică care va fi mărimea controlului dacă se eliberează butonul de maus.

Pentru a redimensiona formularul, clic pe bara de titlu sau pe o zona goală din formular (oriunde nu este un control). Astfel s-a selectat formularul. Apoi clic și tragere de unul din mânerele care apar în jurul formularului.

Pentru a șterge un control, clic-dreapta în formular și se alege Delete from the context menu. Alternativ, clic pentru a selecta controlul și se apasă tasta Delete sau din meniu se alege Edit > Delete. Anularea ștergerii se face cu Ctrl+Z.

Gruparea controalelor

Uneori este eficient să se selecteze temporar câteva controale ca grup din Editor. Acest lucru permite manipularea unitară a controalelor grupate. De exemplu, pentru a modifica mărimea textului a trei casete text, două butoane radio și patru etichete, acestea se grupează și se modifică mărimea textului o singură dată în fereastra Properties. La întregul grup mărimea textului se va modifica automat. (Acest lucru nu se referă la gruparea controalelor într-un control Frame, descris anterior.)

Tehnica de grupare a obiectelor este descrisă mai jos – aici este doar descrisă sumar.

Pentru a șterge, muta, redimensiona sau modifica proprietățile controalelor multiple cu o singură operațiune, mai întâi se selectează controalele într-un grup. Apoi, ele pot fi șterse deodată folosind metodele descrise mai sus. Sau pot fi deodată mutate, redimensionate, modificate proprietățile grupului.

Iată cum se pot grupa controalele:

  • Pentru a selecta mai multe controale alăturate, clic pe primul control, se apasă tasta Shift, apoi clic pe ultimul control din secvență.
  • Pentru a selecta controale care nu sunt alăturate, sau pentru a adăuga alte controale la un grup , se apasă tasta Ctrl și se selectează fiecare control. (Cu tasta Ctrl apăsată se poate și deselecta orice control din grup, cu clic a doua oară pe acel control.)
  • Pentru a selecta mai multe controale din acceași zonă a formularului, clic pe o zonă liberă a formularului și tragere pentru a cuprinde controalele. La eliberarea butonului de maus, Visual Basic Editor selectează controalele ca grup.

Redenumirea controalelor

Ca și la formular, VBA dă fiecărui control adăugat în formular un nume implicit format din tipul controlului și o cifră. Prima casetă text primește automat numele TextBox1. A doua casetă test este numită TextBox2 etc. (Fiecare control din caseta de dialog trebuie să aibă un nume unic, pentru a putea fi identificat în cod.)

De obicei, numele implicit al controalelor este schimbat cu denumiri sugestive.

De exemplu, dacă TextBox2 este folosit pentru a introduce numele organizației, controlul poate fi redenumit cu txtOrganizationName, txtOrgName, txtO_Name sau ceva similar.

Pentru a redenumi un control, se urmează etapele:

1. Clic pe control în formular pentru a-l selecta și a afișa proprietățile lui în fereastra Properties.

      • Dacă fereastra Properties este afișată deja, controlul se poate selecta și din lista din partea de sus a ferestrei Properties. VBA va selecta automat controlul din formular, pentru a-l evidenția și în formular.
      • Dacă fereastra Properties nu este afișată, se poate afișa cu clic dreapta pe un control și alegerea opțiunii Properties. Sau apăsarea tastei F4. (Dacă dispare caseta Toolbox, clic pe formular pentru a o reafișa.)

2. În fereastra Properties, dublu clic pentru a selecta numele implicit aflat în celula de la dreapta proprietății Name.

3. Se tastează noul nume al controlului.

4. Se apasă tasta Enter pentru a seta numele controlului sau clic în altă zonă a ferestrei Properties sau în formular.

După redenumirea unui control, trebuie să fie schimbat și codul pentru acel control

După redenumirea unui control, trebuie modificate în cod și referințele existente la acesta. De aceea se recomandă mai întâi modificarea numelui acelui control, apoi scrierea codului.

Mutarea unui control

Un control poate fi mutat cu clic pentru a-l selecta, apoi tragerea lui către noua locație.

Pentru a muta un control selectat, se plasează cursorul de maus peste marginea din jurul acelui control, apoi clic și tragerea controlului până la noua locație.

Tehnici utile de COPY-AND-PASTE cu controale

Pot fi folosite comenzile Copy și Paste (din bara cu instrumente Standard, din meniul Edit, sau din meniul contextual; sau folosind tastele rapide Ctrl+C sau Ctrl+X și Ctrl+V) pentru a copia sau muta un control.

Copy și Paste nu sunt eficiente pentru a muta un singur control; comanda Paste plasează controlul în mijlocul formularului, deci ulterior trebuie tras în noua poziție.

Însă la crearea de seturi de controale multiple, similare, cum ar fi un grup de casete text și etichetele lor, tehnica Copy – Paste este utilă. Aceasta este o metodă rapidă de construire a unui set de câmpuri care, de exemplu, vor fi completate de utilizator. Astfel, nu mai trebuie poziționat și aliniat fiecare pereche etichetă/ casetă text. Sunt copiate și proprietățile controlului. Se aliniază prima pereche etichetă/casetă text, se aleg proprietățile pentru Font (de obicei, se folosește un font mai mare, modificând mărimea de 8 pt. la 11 pentru a fi vizibil pe toate monitoarele), se redimensionează controalele, se modifică alte proprietăți, apoi, cu controalele selectate, se alege Copy și se clonează perechea selectată de câte ori este nevoie, apăsând tastele Ctrl+V.

Atenție, VBA Editor plasează clonele chiar în centrul formularului și există posibilitatea de a le acoperi pe cele adăugate anterior. De aceea, se recomandă mutarea clonelor, pentru a le afișa pe cele aflate dedesubt.

Iată o altă tehnică: Pentru a copia întregul set de controale dintr-un formular în altul, se selectează toate controalele din Form1, apoi se apasă tastele Ctrl+C pentru a le copia, apoi clic pe Form2 pentru a-l selecta și se apasă tastele Ctrl+V pentru a adăuga întregul set de controale în noul formular.

Avantajul folosirii Copy/Paste pentru a crea noi controale este că acestea moștenesc toate caracteristicile controalelor originale, deci se poate salva timp prin crearea unui control, setarea proprietăților lui și clonarea lui.

Mai trebuie modificate numele copiilor din noua locație, pentru a se potrivi codului cu care lucrează.

Ca alternativă la folosirea comenzilor Copy/ Paste, se poate copia un control (sau mai multe selectate), prin apăsarea tastei Ctrl în timp ce se trage acel control. VBA afișează semnul plus (+) atașat la cursorul de maus pentru a indica că acel control este copiat și mutat. Copia se poate plasa oriunde pe formular.

Modificarea textului pentru Caption de pe control

Unele controale, cum ar fi butoanele radio (option buttons) și casetele de bifare (check boxes) au text predefinit pentru captions pentru a permite utilizatorului să înțeleagă scopul lor. Textul pentru Captions poate fi modificat astfel:

1. Clic pe control pentru a-l selecta.

2. Clic pe elementul caption pentru a-l selecta. VBA afișează un cursor care clipește și o margine punctată în jurul textului.

Cu dublu clic pe un control sau pe formular se deschide fereastra CODE

Cu clic pe o etichetă pentru a o selecta și clic din nou se poate modifica numele etichetei, dar timpul dintre clicuri să fie mai mare, altfel Windows va interpreta această acțiune ca și dublu clic. Cu dublu clic se afișează fereastra Code a formularului și adaugă automat o procedură pentru evenimentul Click al acelui control. Dacă se întâmplă acest lucru, se poate reveni la vizualizarea formularului (numit Design view, spre deosebire de Code view). Se apasă tastele Shift+F7 sau se face dublu clic pe numele modulului din Project Explorer sau se alege View > Object pentru a afișa din nou formularul.

3. Apoi clic în etichetă pentru a o redenumi și selectarea întregului text.

4. Se editează/ modifică textul din etichetă.

5. Se apasă tasta Enter sau clic în zona formularului pentru a finaliza modificarea textului. (Textul poate fi modificat și în proprietatea Caption din fereastra Properties.)

Când ar trebui setate proprietățile unui control?

Proprietățile unui control pot fi setate (specificate) fie în timpul proiectării (când se creează formularul) sau în timpul execuției (când se execută codul formularului). În general, când proprietatea este statică, modificările se fac în timpul proiectării. Unele proprietăți, cum ar fi proprietatea Name a formularului, trebuie modificată în timpul proiectării – nu se poate modifica în timpul execuției. La fel, numele controalelor se modifică în timpul proiectării, deși pot fi adăugate controale și li se poate schimba proprietatea Name și în timpul execuției.

În majoritatea cazurilor, proprietățile pentru mărimea și poziția formularului și a controalelor se aleg în timpul proiectării.

Ocazional, pot fi modificate proprietățile formularului sau a unor controale în timpul execuției. De exemplu, poate apare necesitatea adăugării câtorva butoane radio în designul de bază al formularului. Alternativ, se poate crea un formular care să aibă două grupuri de butoane care ocupă același spațiu - de fapt, un grup poziționat peste celălalt. În timpul executării, se poate modifica proprietatea Visible din cod și, astfel, să se afișeze un grup și să se ascundă celălalt grup. Dacă ambele grupuri conțin același număr de butoane radio, se poate face chiar și un singur grup de butoane radio, alocând proprietățile corespunzătoare fiecăruia la execuție. Cu toate acestea, nu există niciun avantaj deosebit când se face un singur grup de butoane care să își facă datoria dublă. Codul poate deveni mai confuz.

Având în vedere flexibilitatea pe care o oferă multe proprietăți ale controalelor, formularele pot fi proiectate pentru a face față mai multor circumstanțe, afișând și ascunzând diferite grupuri de controale în timpul executării, în loc să se adauge sau să se elimine controale în timpul execuției. Crearea unui set complet de controale pentru un formular în momentul proiectării evită majoritatea dificultăților care pot apărea prin adăugarea de controale suplimentare în timpul execuției. Acestea fiind spuse, uneori este posibil să fie nevoie să fie creat un formular de utilizator din mers pentru a prezenta informații despre situația nou creată.

După cum se va vedea în continuare, valorile pentru unele controale trebuie setate în timpul execuției. De exemplu, uneori nu se poate atribui o listă de articole la o casetă listă sau la o casetă combo în momentul proiectării. Dacă lista afișează elemente dintr-o bază de date, lista poate varia în funcție de setul de date ales de utilizator. Deci, codul trebuie scris ca să completeze caseta listă în timpul execuției. (Adesea, caseta listă va fi completată în timpul unei proceduri UserForm_Initialize care se execută pe măsură ce formularul de utilizator este inițializat pentru afișare.) Setul de articole din unele liste poate fi cunoscut în avans și specificat în cod din timpul proiectării, cum ar fi o casetă listă care afișează toate țările din lume, din care utilizatorul selectează țara de reședință.

Proprietățile principale din controalele Toolbox

Mai jos sunt descrise proprietățile principale ale controalelor din caseta Toolbox implicită.

Mai întâi sunt explicate proprietățile comune mai multor controale. Apoi se detaliază fiecare control, afișând doar proprietățile specifice acelui control.

Proprietăți comune

Tabelul de mai jos afișează proprietățile majorității controalelor, grupate după categorii.

Label

Controlul Label afișează text pe ecran. Este folosit mai ales pentru a identifica scopul unui alt control, deci, un control Label este plasat în formular la stânga unei casete text box, pentru a-i descrie menirea. Proprietatea Caption se folosește pentru a scrie în text ce va afișa eticheta (label). Proprietatea TextAlign se folosește ca în tabelul de mai jos pentru a alinia eticheta cu bordurile controlului Label.

TextBox

TextBox este unul din cele mai folosite controale. De reținut că este un control pe o singură linie (folosit mai des pentru a afișa un câmp pe care trebuie să îl completeze utilizatorul). Opțiunea Single-line este implicită. Sau poate fi un control de tip multiline, pentru a afișa mai mult text, ca în programe-jurnal în care utilizatorul hotărăște câte linii va scrie. Această caracteristică se ajustează cu proprietatea MultiLine, care poate fi setată la True sau False. Mărimea implicită a textului din TextBox este de 8 pt. (de obicei, prea mică) și fontul implicit este Tahoma (tip de font sans serif care, în general, este mai adecvat pentru titluri decât pentru text). Cu ajutorul proprietății Font se poate alege un alt tip de font (cum ar fi Times New Roman) și altă mărime.

Tabelul următor afișează proprietățile pentru taste a controlului TextBox.

ComboBox și ListBox

Aceste controale sunt asemănătoare. Din punctul de vedere al utilizatorului, diferența este că list box arată o listă de opțiuni din care utilizatorul trebuie să aleagă, în timp ce combo box oferă acea listă și include un câmp în care utilizatorul poate introduce un alt element.

Tabelul următor afișează proprietățile pentru controalele ComboBox și ListBox. Aceste două controale sunt similare și au în comun mai multe proprietăți. Însă au și proprietăți diferite la comportament și caracteristici; aceste diferențe sunt descrise în tabel, la "Doar List box" și "Doar Combo box".

CHECKBOX

Casetele pentru bifare (check box) sunt similare cu butoanele radio (option button) – un set de alegeri prezentate utilizatorului. Butoanele radio permit utilizatorului să selecteze doar o opțiune (ca la aparatul de radio). În cazul casetelor pentru bifare, utilizatorul poate bifa mai multe casete.

Majoritatea proprietăților controlului CheckBox au fost descrise deja. Proprietatea care nu a fost descrisă este TripleState, care este o caracteristică a controalelor OptionButton și ToggleButton.

TripleState este o proprietate Booleană care determină dacă caseta check box, butonul radio sau butonul toggle au o stare nulă, pe lângă stările True și False. Atunci când o casetă check box sau alt control au starea null, ele sunt afișate cu un mic punct negru în casetă.

Starea null poate fi văzută în starea casetei de dialog Font din Word atunci când o proprietate este valabilă doar pentru o parte din elementele selectate – de exemplu, caseta de bifare Strikethrough din figura următoare este adevărată doar pentru unele caractere din selecția curentă. De exemplu, se selectează text în care o parte din caractere sunt tăiate, iar altele nu. În acest caz apare starea null pentru casete Strikethrough.

În mod normal, o casetă de bifare (check box) este fie bifată, fie nebifată, dar când se află în starea null, conține un pătrat mic negru, care indică faptul că nu e nici true, nici false. (În versiunile mai vechi din Office, starea null din caseta check box era indicată prin umplerea casetei cu o culoare gri sau neagră.)

Alte proprietăți descrise pe scurt în contextul altor controale sunt detaliate mai jos:

♦ Proprietatea SpecialEffect controlează aspectul vizual al casetei. Valoarea implicită este fmButtonEffectSunken (2), care afișează o casetă adâncită – ca la casetele de dialog 3D din Windows. Se poate alege și fmButtonEffectFlat(0) pentru a afișa o casetă cu efect plat, care se potrivește cu estetica modernă promovată de Microsoft în Windows 8 – fără treceri de culoare, opacitate, efecte dimensionale, umbre, culori rafinate, străluciri, reflecții, text cu serif etc.

Figura următoare afișează o casetă de bifare adâncită și una plată.

Proprietatea Value, care indică dacă caseta este selectată (True) sau nu (False), este proprietatea implicită a casetei.

De reținut că proprietatea implicită nu trebuie să fie specificată în cod. Ea este implicită.

Astfel, se poate scrie fie CheckBox1.Value, fie doar CheckBox1. Următoarele trei instrucțiuni au același efect:

If CheckBox1.Value = True Then 
If CheckBox1 = True Then 
If CheckBox1 Then

Proprietatea Accelerator oferă un acces rapid la caseta de bifare. Casetei i se atribuie o combinație unică de taste rapide pentru a bifa casetele, astfel încât utilizatorul să poată comuta rapid la o stare, folosind tastatura.

OptionButton

Butoanele radio (OptionButton) sunt utile atunci când utilizatorul trebuie să aleagă un sigur element dintr-un grup. Un grup de butoane radio afișează un set de opțiuni care se exclud reciproc. Doar un buton din grup poate fi selectat la un moment dat. De exemplu, pot fi două butoane radio sub antetul Sex: Masculin și Feminin. (De reținut că la casetele CheckBox se pot face mai multe alegeri simultan. Casetele CheckBoxes sunt utile la alegerea mai multor opțiuni. De exemplu, sub antetul Typeface, pot fi opțiunile Italic, Bold și Underlined, toate putând să fie selectate simultan.)

La fel ca la casetele CheckBox, controlul butoanelor radio (OptionButton) are un set de proprietăți clar. Secțiunea afișează proprietatea GroupName, care este unică pentru OptionButton și câteva proprietăți pentru lucrul cu butoanele radio.

Proprietatea GroupName este de tip String și atribuie butonul radio unui grup de butoane radio. Alternativ, se poate crea un grup prin plasarea unui set de butoane radio într-un control Frame. Ideea de bază este că, odată grupate, butoanele se exclud reciproc. Dar într-un formular pot fi mai multe grupuri (sau seturi) de butoane atâta timp cât se folosește un control Frame sau cât proprietatea GroupName izolează diferitele grupuri de butoane.

Setarea implicită pentru GroupName este un șir gol (""), care înseamnă că butonul radio nu este atribuit niciunui grup până când se atribuie explicit unui grup. Când se introduce numele grupului, este creat automat și acel grup. Folosind proprietatea GroupName, pot fi create mai multe grupuri de butoane radio în același formular fără a folosi controale cadru (Frame) pentru a specifica grupurile, dar grupurile logice trebuie să se distingă unul de altul astfel încât utilizatorul să poată înțelege care butoane radio formează un grup. Folosirea controlului Frame este modalitatea cea mai simplă de delimitare a grupurilor de butoane radio, vizual și logic – dar este mai util să se aibă flexibilitatea pe care GroupName o oferă atunci când este nevoie de ea. De asemenea, controlul Frame are proprietatea Caption predefinită, care poate fi folosită pentru a descrie scopul grupului.

Iată celelalte proprietăți principale ale unui control OptionButton:

  • Proprietatea Value, care indică dacă butonul radio este selectat (True) sau nu (False) – proprietatea implicită a butonului radio. Se poate seta sau returna starea butonului radio, prin setarea fie a obiectului OptionButton, fie a proprietății Value la True sau False, după cum este nevoie. Setând proprietatea Value a butonului radio (OptionButton) la True setează proprietatea Value a celorlalte controale OptionButton din același grup la False.
  • Proprietatea Accelerator oferă un acees rapid la butonul radio. Prin atribuirea câte unei taste unice fiecărui buton radio, utilizatorul poate comuta între cele două stări folosind tastatura.
  • Proprietatea SpecialEffect controlează aspectul vizual al butonului radio. Valoarea implicită fmButtonEffectSunken (2) afișează un buton adâncit, iar fmButton EffectFlat (0) afișează un buton plat. În figura urm[toare se poate vedea un buton radio adâncit și unul plat.
  • Proprietatea TripleState (discutată anterior, la "CheckBox") permite crearea unui buton opțional care are trei stări: selectat (True), neselectat (False) și null (care apare ca fiind selectat, dar pe gri - inactiv). Proprietatea TripleState este dezactivată, astfel încât utilizatorul să nu poate seta interactiv starea null, dar programatorul să poată să o aleagă din cod.

BUTONUL DE COMUTARE - TOGGLE

Acest buton funcționează ca un întrerupător; el poate fi doar deschis sau închis. Atunci când nu este selectat, controlul ToggleButton apare ridicat, iar când este selectat pare apăsat. Proprietățile principale pentru controlul ToggleButton sunt asemănătoare cu cele ale butoanelor CheckBox și CommandButton:

  • Proprietatea Value este proprietatea implicită a controlului ToggleButton.
  • Proprietatea TripleState este rareori folosită, dar permite crearea unui control ToggleButton care are trei stări diferite: selectat (True), deselectat (False) și null. Utilizatorul poate seta trei stări pentru ToggleButton cu clic pe buton. În starea null, butonul ToggleButton apare selectat, dar gri.
  • Proprietatea Accelerator oferă acces rapid la butonul de comutare.

Frame

Controlul Frame este relativ simplu și are câteva proprietăți care sunt menționate în tabelul de mai jos. Controlul Frame are în comun câteva proprietăți cu obiectul Page.

CommandButton

Butonul CommandButton este folosit destul de des. Acest control are trei proprietăți unice, afișate în tabelul următor.

De reținut că se recomandă setarea proprietății Accelerator pentru fiecare buton de comandă din formular. Astfel, utilizatorul poate accesa rapid butonul de la tastatură.

UNEORI BUTONUL CANCEL AR TREBUI SĂ FIE BUTONUL IMPLICIT

Uneori, butonul Cancel ar trebui să fie butonul implicit din formular. Astfel se obține un beneficiu pentru formularele care oferă acțiuni ireversibile, cum ar fi ștergerea unui text sau a unui fișier, dar poate face confuz ajutorul de accesibilitate (cum ar fi cititorii de ecran) și poate îngreuna lucrul cu formularul pentru utilizatorii cu dificultăți cognitive. Din aceste motive, de obicei cel mai bine este ca un alt buton din formular să fie făcut implicit, în locul butonului Cancel.

Controalele TabStrip permit crearea unei casete de dialog cu mai multe pagini. Un exemplu este caseta de dialog Font din Word, care se poate deschide cu clic pe fila Home, apoi clic pe pictograma săgeată mică din colțul din dreapta jos al zonei Font de pe Panglică. Se va deschide caseta de dialog Font care are două file. O filă este etichetată Font și cealaltă filă este etichetată Advanced. Aceasta este o modalitate bună de a organiza o casetă de dialog atunci când sunt mai multe opțiuni de prezentat utilizatorului.

Controlul TabStrip are mai multe proprietăți unice și o serie de proprietăți pe care le partajează cu controlul MultiPage. Tabelul următor prezintă aceste proprietăți.

Un SpinButton permite utilizatorului să crească sau descrească cu ușurință numere, date și așa mai departe. ScrollBar și SpinButton împărtășesc o serie de proprietăți pe care nu le-ați întâlnit încă. Tabelul de mai jos prezintă aceste proprietăți.

Image

Mai sus au fost descrise toate proprietățile controlului Image. De obicei când se folosește controlul Image, se ajustează următoarele proprietăți:

  • Proprietatea Picture, pentru a atribui imaginea care apare în controlul Image. Clic pe rândul Picture din fereastra Properties, apoi click pe butonul cu trei puncte (...). În fereastra de dialog Load Picture, se alege imaginea și apoi clic pe butonul OK pentru a o încărca. Controlul Image poate afișa fișiere de tip .BMP, .CUR (cursor), .GIF, .ICO (icon), .JPG și .WMF, dar nu și alte fișiere grafice, cum ar fi .TIF. Majoritatea aplicațiilor grafice pot converti un tip de fișier grafic în altul.

O METODĂ RAPIDĂ DE A CAPTURA O IMAGINE GRAFICĂ

Metoda cea mai simplă de a afișa o parte din ecranul Windows într-un control Image este de a captura ecranul prin apăsarea tastei Print Screen (pentru a captura întregul ecran) sau tastele Alt+Print Screen (pentru a captura fereastra activă). Apoi imaginea capturată se adaugă într-o aplicație grafică – de exemplu Windows Paint, se decupează dacă este necesar și se salvează ca fișier.BMP. Windows 8 a introdus o altă opțiune: apăsarea tastelor Windows și Print Screen pentru a captura imaginea de pe ecran și a o salva automat pe disk. Imaginea capturată este salvată în folderul Libraries (sau Pictures), subfolderul Screenshots. Imaginea este salvată în format .PNG. O altă modalitate de captură ecran (sau zonă de pe ecran) este prin folosirea utilitarului Snippping Tool din Windows.

  • Folosirea proprietății PictureAlignment pentru a seta alinierea imaginii.
  • Folosirea proprietății PictureSizeMode pentru a seta dacă imaginea va fi decupată, întinsă sau mărită pentru a acoperi controlul Image. Dacă este nevoie, se ajustează înălțimea și lățimea controlului Image.
  • Folosirea proprietății PictureTiling dacă se dorește ca imaginea să se repete pentru a acoperi întregul control.

Page

Obiectul Page este o pagină conținută de obiectul MultiPage. Toate proprietățile au fost descrise mai sus (în contextul altor controale) cu excepția proprietății Index, care e folosită și se obiectul Tab.

Proprietatea Index este de tip Integer și determină poziția obiectului Page în colecția Pages din controlul MultiPage sau poziția obiectului Tab din colecția Tabs din TabStrip. Primul obiect Page sau Tab este numerotat cu 0 (zero), al doilea obiect Page sau Tab este numerotat cu 1 etc. Proprietatea Index poate fi modificată pentru a schimba poziția elementului.

Tab

Obiectul Tab este unul din taburile conținute de obiectul TabStrip. Proprietățile obiectului au fost descrise în contextul altor controale.