Legarea unui formular la o procedură

Proiectarea unui formular particularizat este doar primul pas de lucru cu o procedură. Următorul pas este scrierea codului pentru afișarea formularului și pentru lucrul cu acel formular.

De obicei, codul pentru un formular este format din:

  • O procedură pentru macrocomandă care afișează fereastra de dialog pentru încărcarea ei și folosirea metodei Show. Această procedură poate fi atribuită unui buton din Quick Access Toolbar sau unei combinații de taste. De asemenea, o procedură poate fi proiectată ca să fie declanșată automat în funcție de răspunsul la un eveniment din sistemul de operare (pornirea la o anumită oră sau la deschiderea unui registru de lucru).
  • Formular și controalele pe care acesta le conține.
  • Codul atașat la formular. Acest cod este format din proceduri pentru controalele din formular. De exemplu, pentru o casetă de dialog simplă care conține două butoane radio și două butoane de comandă (butoanele OK și Cancel), se scrie o procedură pentru butonul OK și una pentru butonul Cancel. Procedura pentru butonul OK este executată atunci când utilizatorul face clic pe buton sau apasă tasta Enter când acel buton este activ. Oricare dintre aceste acțiuni ale utilizatorului declanșează evenimentul Click al butonului și orice cod a fost scris de programator în cadrul acestui eveniment este executat. Cel mai simplu mod de a crea un eveniment (procedură) pentru un control este cu dublu clic pe controlul din formular. VBA Editor comută automat la vizualizarea ferestrei Code și scrie comenzile necesare Sub ... End Sub pentru acel eveniment, astfel:
Private Sub btnOK_Click()
End Sub

VBA Editor creează automat numele procedurii combinând proprietatea Name pentru acel control cu numele evenimentului, separate de caracterul underscore: btnOK_Click.

În casetele de dialog Statice, evenimentele Click sunt folosite de obicei cu butoane de comandă

Majoritatea controalelor au la dispoziție destul de multe evenimente. Unele dintre evenimente pot părea necorespunzătoare sau inutile la început. De exemplu, butoanele radio au un eveniment Click. De ce? Este logic să se răspundă în cod la un eveniment, cum ar fi clic de maus) folosind butoanele de comandă dintr-o casetă de dialog static. (O casetă de dialog static este cel mai obișnuit tip. Comenzile nu sunt animate; nu se modifică și nu se mișcă.) Cu toate acestea, într-o casetă de dialog dinamică, este posibil să fie nevoie să se captureze clic pe butonul radio și să se afișeze controale suplimentare pentru a obține o intrare suplimentară de la utilizator.

După atașarea codului la buton, execuția revine la formular (dacă este încă afișat) sau la procedura care a apelat acel formular.

Codul care rulează direct ca răspuns la un eveniment este numit event procedure sau event handler. O procedură bazată pe un eveniment poate apela alte proceduri, deci pot fi executate mai multe proceduri la declanșarea unui singur eveniment.

Încărcarea și descărcarea unui formular

Încărcarea unui formular se face folosind comanda Load, iar la descărcare se folosește comanda Unload. Comanda Load încarcă formularul în memorie, dar nu îl afișează. Metoda Show afișează formularul. Comanda Unload descarcă formularul din memorie și eliberează din memorie orice altceva este asociat cu acel obiect. Dacă formularul este afișat când rulează comanda Unload, VBA elimină formularul de pe ecran.

Sintaxa pentru comenzile Load și Unload sunt simple:

Load UserForm1 
Unload UserForm1

Aici, UserForm1 este numele formularului. De exemplu, comanda următoare încarcă fereastra de dialog numită frmMyDialog:

Load frmMyDialog

Afișarea și ascunderea unui formular

Pentru a afișa un formular, se folosește metoda Show; pentru a ascunde formularul, se folosește metoda Hide. De exemplu, următoarea comandă afișează formularul numit frmMyDialog:

frmMyDialog.Show

La executarea unei proceduri care conține această linie, formularul frmMyDialog apare pe ecran, pentru ca utilizatorul să îl poată folosi: să introducă text în casetele text, să bifeze sau nu casete de bifare, să folosească listele din formular, să facă clic pe butoane etc.

Atunci când utilizatorul închide formularul (cu clic pe butonul Close sau clic pe un buton de comandă), formularul dispare de pe ecran și procedura continuă să ruleze. Formularul este ascuns, nu și descărcat.

Un formular poate fi afișat folosind metoda Show fără a încărca în mod explicit formularul cu comanda Load. VBA are grijă de comanda implicită de încărcare. Nu există niciun avantaj deosebit în a include comanda Load, dar ar putea face codul dvs. mai ușor de citit și de depanat. De exemplu, cele două proceduri prezentate aici au același efect:

Sub Display_Dialog()
Load frmMyDialog 'incarca formularul in memorie
frmMyDialog.Show 'afisează formularul
End Sub

Sub Display_Dialog()
frmMyDialog.Show 'incarca formularul in memorie si il afiseaza
End Sub

La executarea metodei Hide fără a încărca formularul în memorie cu comanda Load sau metoda Show, VBA va încărca formularul, fără a-l afișa pe ecran.

După afișarea formularului, se poate verifica ordinea de folosire a controalelor apăsând tasta F5 și apoi apăsând repetat tasta Tab, pentru a vedea care este primul buton activ și următoarele.

Setarea unui buton de comandă implicit

Pentru a specifica butonul de comandă implicit din formular, se setează proprietatea Default la True pentru acel buton. La deschiderea formularului, VBA selectează butonul implicit, astfel încât utilizatorul poate folosi tasta Enter pentru a închide caseta de dialog.

La un moment dat, doar un buton poate fi butonul implicit. Dacă ulterior se alege pentru un alt buton proprietatea Default la True, VBA modifică automat la False proprietatea Default a butonului care anterior a fost setată ca True.