Obținerea alegerilor făcute de utilizator într-o casetă de dialog

Pentru ca formularul să facă ceva, codul va reacționa la ceea ce introduce utilizatorul. Mai jos se descrie modul în care se pot obține alegerile utilizatorului într-o casetă de dialog simplă, apoi într-un formular complex.

Returnarea unui String dintr-o casetă Text

Pentru a returna (obține informații care se vor folosi în cod) un șir dintr-o casetă text, codul poate verifica proprietatea Value sau Text după ce utilizatorul a făcut clic pe butonul OK sau Cancel sau a închis în alt mod caseta de dialog.

De exemplu, în caseta text numită txtMyText, se poate returna valoarea ei și afișa într-o casetă mesaj folosind linia:

MsgBox txtMyText.Value 

Proprietatea Text a unei casete Text este unică

Pentru o casetă text, proprietatea Value și Text returnează aceeași informație. Pentru alte obiecte VBA, proprietățile Value și Text returnează informații diferite.

De reținut că VBA suportă casete text cu text pe o linie sau pe mai multe linii. Pentru crearea unei casete text multilinii, se selectează caseta text din formular sau din lista drop-down din fereastra Properties și se setează proprietatea MultiLine la True. Utilizatorul poate introduce mai multe linii în caseta box și poate scrie rânduri noi apăsând tastele Shift+Enter.

Modificări rapide pentru proprietățile care au două stări

Iată un sfat: La schimbarea unei proprietăți Booleene (care are două stări, True sau False), cum ar fi Enabled, Visible sau Multiline, se face dublu clic pe valoarea din fereastra Properties. De exemplu, pentru a schimba setarea implicită False pentru Multiline, se face dublu clic pe False din fereastra Properties. Aceasta se va schimba la True. (Nu funcționează cu proprietatea Value.)

Pentru a adăuga o bară de derulare orizontală sau verticală la o casetă text, se setează proprietatea ScrollBars la 1 - fmScrollBarsHorizontal (pentru o bară de derulare orizontală), 2 - fmScrollBarsVertical (pentru bară de derulare verticală, care de obicei e mai utilă) sau 3 - fmScrollBarsBoth (pentru ambele).

Returnarea unei valori de la un buton radio - Option Button

Un buton radio obișnuit este un control binar, care are doar două valori: True și False.

True indică faptul că butonul este selectat, False că nu este selectat. Valoarea unui buton radio poate fi verificată cu o structură simplă If...Then. De exemplu, dacă sunt două butoane radio numite optSearchForFile și optUseThisFile, se pot verifica valorile și găsi ce a fost selectat folosind codul:

If optSearchForFile = True Then 'optSearchForFile a fost selectat; 
' comenzi pentru butonul selectat 
Else 'optSearchForFile nu e selectat, deci optUseThisFile a fost selectat
' comenzi pentru optUseThisFile 
End If

De reținut că Value este proprietatea implicită pentru controlul OptionButton. Codul anterior verifică valoarea proprietății implicite a controlului, deci ea nu mai trebuie specificată în cod. Proprietățile implicite pot fi omise, pentru a scurta programarea. Prima linie a codului poate fi scrisă și astfel

If optSearchForFile.Value = True Then. 

Dar în exemplul de mai sus, comanda este mai scurtă, cu = True implicat: If optSearchForFile Then.

Atunci când sunt mai multe butoane radio, se folosește o condiție If...Then...ElseIf sau o comandă Select Case pentru a determina care buton radio a fost selectat.

Nu se poate testa direct o valoare nulă

Un buton radio sau o casetă de bifare pot avea și valoarea null dacă proprietatea TripleState este setată la True. Null înseamnă că “nu este nici true, nici false”- de exemplu un paragraf poate fi scris îngroșat parțial, deci FontStyle nu este nici îngroșat, nici normal, e din ambele. Dacă este activată și o a treia stare (Null) pentru un buton radio sau de bifare, codul va trebui să verifice și această stare. Starea Null nu poate fi verificată direct (de exemplu, If optl.Value = Null întoarce o eroare), deci se vor folosi o comandă If sau una Select Case pentru a testa mai întâi True și False. Dacă valoarea controlului - Value - nu este nici True nici False, ea va fi Null.

Returnarea valorii de la o casetă de bifare

Ca și la butonul radio, caseta de bifare poate avea doar două stări True sau False, deci se poate folosi structura If...Then pentru a verifica acea valoare. Iată un exemplu:

If chkDisplayProgress = True Then
'se scriu comenzi pentru chkDisplayProgress 
End If

Și aici, pentru a verifica proprietatea implicită a controlului – proprietatea Value, pe prima linie s-a scris If chkDisplayProgress.Value = True Then.

Uneori se fac anumite acțiuni atunci când caseta de bifare este goală (deselectată). De exemplu, dacă utilizatorul debifează caseta, trebuie debifată opțiunea de configurare.

Returnarea unei valori din List Box

Casetele List box sunt goale. Deci, înainte de a cere utilizatorului să aleagă un element din listă, lista trebuie completată cu elemente, pentru ca utilizatorul să poată alege – trebuie ca VBA să aibă ce să afișeze. Pentru a face acest lucru, se poate creea o procedură pentru a initializa (pregăti) formularul și a adăuga elementele la caseta listă înainte de a o afișa:

  1. Clic dreapta pe numele formularului din Project Explorer și se alege View Code din meniul contextual pentru a afișa (în fereastra Code) codul pentru controalele atribuite casetei de dialog. Sau cu dublu clic în fundalul formularului se alege Code view. De reținut că se poate comuta între fereastra Code (tasta F7) și fereastra de proiectare a formularului (Shift+F7).
  2. În lista drop-down pentru Object (partea stângă sus în fereastra Code), se verifică dacă UserForm este selectat.
  3. Se alege Initialize din lista drop-down Procedure (în partea dreaptă sus a ferestrei Code). Visual Basic Editor va creea o nouă procedură numită Private Sub UserForm_Initialize, o va insera la sfârșitul procedurilor afișate în fereastra Code:
Private Sub UserForm_Initialize()
End Sub

Iată un sfat: VBA execută o procedură UserForm_Initialize de fiecare dată când formularul este folosit. Această procedură este un loc potrivit în care pot fi adăugate elemente din caseta list box sau combo box sau pentru a seta proprietăți ale altor controale din formular. Altfel zis, evenimentul Initialize poate conține cod care să facă operații preliminare înainte de a afișa formularul.

4. Pentru a adăuga elemente la o listă, se poate folosi metoda AddItem pentru obiectul casetei list box (aici caseta este numită Baterii) cu un șir text între ghilimele pentru a afișa numărul ID pentru fiecare baterie din listă:

Baterii.AddItem "Baterie #A4601" 
Baterii.AddItem "Baterie #A4602" 
Baterii.AddItem "Baterie #A4603" 
Baterii.AddItem "Baterie #A4604"

Evenimentul Initialize este Flexibil

Adăugând articole la inițializarea formularului, se pot adăuga diferite numere de articole după caz. De exemplu, dacă utilizatorul trebuie să aleagă un document dintr-un anumit folder, se poate crea o listă a documentelor din acel folder, în timpul execuției procedurii și se poate completa lista din casetă cu numele documentelor.

Pentru a prelua alegerea utilizatorului din lista casetei cu singură selectare, se bifează proprietatea Value din codul, astfel:

MsgBox "Din lista a fost aleasa: " & Baterii.Value

Casetele listă din care se poate alege doar un element sunt ca și butoanele radio – utilizatorul poate alege doar un element.

Când se activează proprietatea MultiSelect pentru o casetă listă din care se pot alege mai multe elemente, nu se mai poate folosi proprietatea Value pentru a returna elementele selectate în caseta listă. Când MultiSelect este setat la True, Value va returna mereu valoarea null. În locul ei, se folosește proprietatea Selected pentru a determina care rânduri din caseta listă sunt selectate și proprietatea List (este un șir) pentru a returna valorile de pe fiecare rând selectat.

Comenzile următoare folosesc o buclă For...Next pentru a construi un șir numit strMsg care să conțină intrările selectate din lista multiselect:

strMsg = "Ati ales urmatoarele elemente din lista: " & vbCr
For i = 1 To lstBatteries.ListCount
If lstBatteries.Selected(i - 1) = True Then
strMsg = strMsg & lstBatteries.List(i - 1) & vbCr 
End If
Next i
MsgBox strMsg

Returnarea unei valori din caseta Combo Box

Pentru a returna o valoare dintr-o casetă combo box (control care este o combinație între controalele list box și text box), mai întâi se adaugă elemente la combo box în procedura Initialize apoi se verifică cu Value pentru combo box după ce utilizatorul a închis formularul. (Controlul combo box nu oferă posibilitatea alegerii mai multor selecții, deci se va verifica doar proprietatea Value.)

De exemplu, se poate folosi următorul cod pentru a adăuga elemente la controlul combo box numit cmbColor:

Private Sub UserForm_Initialize() 
cmbColor.AddItem "Rosu" 
cmbColor.AddItem "Galben" 
cmbColor.AddItem "Albastru"
End Sub

Pentru a returna elementul ales de utilizator în combo box, se caută proprietatea Value:

Result = cmbColor.Value

Elementul găsit în combo box poate fi fie un element atribuit în procedura Initialize, fie unul adăugat de utilizator în zona text-box din combo box