VBA Excel

21
3. Utilizarea Message box și Input box În Excel VBA există multe funcţii predefinite (built-in) disponibile pe care le putem folosi pentru a eficientiza programele VBA. Printre aceste funcţii, există două funcţii foarte importante și anume caseta de mesaj (Message box) și caseta de intrare (Input box ). Aceste două funcţii sunt utile, deoarece ele fac programul VBA mult mai interactiv. Caseta de intrare permite utilizatorului introducă datele în timp ce caseta de mesaj afișează date ieșire sau informaţii pentru utilizator. Funcţia MsgBox () Obiectivul funcţiei MsgBox este de a produce o casetă mesaj de tip pop-up și de a cere utilizatorului să facă clic pe un buton de comandă înainte de a continua. Formatul general al casetei de mesaj este următorul: yourMsg=MsgBox(Prompt, Style Value, Title) Primul argument, Prompt, afișează un mesaj în caseta de mesaj. Style Value determină ce tip de buton de comandă va apărea în

description

Excel VBA2

Transcript of VBA Excel

Page 1: VBA Excel

3. Utilizarea Message box și Input box

În Excel VBA există multe funcţii predefinite (built-in) disponibile pe care le putem folosi pentru a eficientiza programele VBA. Printre aceste funcții, există două funcții foarte importante și anume caseta de mesaj (Message box) și caseta de intrare (Input box ).

Aceste două funcții sunt utile, deoarece ele fac programul VBA mult mai interactiv. Caseta de intrare permite utilizatorului să introducă datele în timp ce caseta de mesaj

afișează date ieșire sau informații pentru utilizator.

Funcția MsgBox () Obiectivul funcției MsgBox este de a produce o casetă mesaj de tip pop-up și de a cere utilizatorului să facă clic pe un buton de comandă înainte de a continua. Formatul general al casetei de mesaj este următorul:

yourMsg=MsgBox(Prompt, Style Value, Title)

Primul argument, Prompt, afișează un mesaj în caseta de mesaj. Style Value determină ce tip de buton de comandă va apărea în caseta de mesaj. Tabelul 3.1 prezintă butoanele de comandă care pot fi afișate. Argumentul Title afișează titlul casetei de mesaj.

Page 2: VBA Excel

Tabelul 3.1: Style Values (Valori pentru stil) și butoanele de comandă

Style Nume Constanta Buton Afisat

0 vbOkOnly Ok button

1 vbOkCancel Ok and Cancel buttons

2 vbAbortRetryIgnore Abort, Retry and Ignore buttons.

3 vbYesNoCancel Yes, No and Cancel buttons

4 vbYesNo Yes and No buttons

5 vbRetryCancel Retry and Cancel buttons

Page 3: VBA Excel

Putem folosi Named Constant (denumirea constantelor) în locul valorilor numerice pentru al doilea argument pentru a face programele mai ușor de citit. De fapt, VBA va afișa automat o listă de “Named Constant” în cazul în care puteți selecta una dintre ele. De exemplu,

yourMsg=MsgBox("Click OK to Proceed", 1, "Startup Menu") și

yourMsg=Msg("Click OK to Proceed”, vbOkCancel, "Startup Menu")

sunt identice.

yourMsg este o variabilă care reține valorile care sunt returnate de funcția MsgBox(). Valorile sunt determinate de butonul apăsat de utilizator. Trebuie să fie declarat ca tip de date Integer în procedură sau în secțiunea declarații generale.

Tabelul 3.2 prezintă valorile, denumirea constantelor (Named Constant ) și butoanele corespunzătoare.

Page 4: VBA Excel

Value Named Constant Button Clicked

1 vbOk Ok button

2 vbCancel Cancel button

3 vbAbort Abort button

4 vbRetry Retry button

5 vbIgnore Ignore button

6 vbYes Yes button

7 vbNo No button

Tabel 3.2: Valorile Returnate și Butoanele de Comandă

Page 5: VBA Excel

Exemplul 3.1

În acest exemplu, mesajul existent în celula (1,2) "Primul tău program VBA (Your first VBA program)" va fi afișat în caseta de mesaj. Deoarece nu se adaugă nici un nume de constanta se va afișa doar mesajul și butonul "OK", așa cum se arată în Figura 3.1

Private Sub CommandButton1_Click() Dim YourMsg As String Cells(1, 2) = "Your first VBA program" YourMsg = Cells(1, 2) MsgBox YourMsg

End Sub

Page 6: VBA Excel

Figura 3.1: Caseta de mesaj ”Message box” cu buton OK

Page 7: VBA Excel

Exemplul 3.2În acest exemplu, se adaugă constanta denumita vbYesNoCancel ca al doilea argument, astfel încât caseta de mesaj va afişa butoanele Yes, No și Cancel, aşa cum se arată în figura 3.2.

Private Sub CommandButton1_Click()Dim YourMsg As StringCells(1, 2) = "Your first VBA program"YourMsg = Cells(1, 2)MsgBox YourMsg, vbYesNoCancel

End Sub

Figura 3.2: Message box cu butoanele Yes, No și Cancel

Page 8: VBA Excel

Pentru a face caseta de mesaj să arate mai sofisticat, există posibilitatea de a adăuga o pictogramă de lângă mesajul. Există patru tipuri de pictograme disponibile în VBE, aşa cum se arată în Tabelul 3.3.

Value Named Constant Icon

16 vbCritical  

32 vbQuestion

48 vbExclamation

64 vbInformation

Tabel 3.3 Pictograme disponibile în Message box

Page 9: VBA Excel

Exemplul 3.3Codul din acest exemplu este în esență același ca și în exemplul 3.2, dar este adăugată ca al treilea argument, constanta cu numele vbExclamation. Cele două constante de nume pot fi unite cu ajutorul semnul "+". Caseta de mesaj va afișa acum pictograma cu semnul de exclamare, așa cum se arată în Figura 3.3.

Private Sub CommandButton1_Click()Dim YourMsg As StringCells(1, 2) = "Your first VBA program"YourMsg = Cells(1, 2)MsgBox YourMsg, vbYesNoCancel + vbExclamation

End Sub

Figura 3.3: Message box cu butoanele Yes, No, Cancel și pictograma

Page 10: VBA Excel

Se poate chiar semnala care butonul este apăsat de utilizator pe baza valorilor returnate prezentate în tabelul 3.2.

În Exemplul 3.4 este folosită structura condiţională If .... Then ... Else. (se va explica mai târziu)

Exemplul 3.4Private Sub CommandButton1_Click()

Dim testMsg As IntegertestMsg = MsgBox(" Apasa pentru un test", vbYesNoCancel + vbExclamation, " Mesaj Test")If testMsg = 6 ThenCells(1,1).Value = " S-a apasat butonul Yes"ElseIf testMsg = 7 ThenCells(1,1).Value = " S-a apasat butonul No "ElseCells(1,1).Value = " S-a apasat Cancel "End If

End Sub

Page 11: VBA Excel

3.2 Funcţia InputBox ()

O casetă InputBox() este o funcție care afișează o casetă de intrare și în care utilizatorul poate introduce o valoare sau un mesaj în formă de text. Formatul este:

myMessage=InputBox(Prompt, Title, default_text, x-position, y-position)

Variabila myMessage apartine tipului de date variant, dar de obicei aceasta este declarată ca un șir de caractere, care primește mesajul introdus de către utilizatori. Argumentele au următoarele semnificații:

Prompt Mesajul afişat în inputbox (caseta de intrare ).

Title Titlul casetei de intrare

default-text Textul implicit care apare in câmpul de intrare pe care utilizatorii îl utilizează ca o valoare de intrare probabilă sau pe care îl pot eventual schimba cu altă valoare

x-position and y-position Poziţia sau coordonatele casetei de intrare

Page 12: VBA Excel

Exemplul 3.5Ecranul afișat de programul din exemplu 3.5 este prezentat în Figura 3.4

Private Sub CommandButton1_Click()Dim userMsg As StringuserMsg = InputBox(" Care este mesajul dumneavoastră?", " Formular de introducere date ", "Introduceti mesajul aici", 500, 700)Cells(1,1).Value=userMsg

End SubAtunci când utilizatorul face clic pe butonul OK, va apărea o caseta de intrare

aşa cum se arată în Figura 3.4. Se observă că titlul casetei de intrare este "Formular de introducere date" și mesajul afişat de prompter este "Care este mesajul dumneavoastră". După ce utilizatorul introduce mesajul și clic pe butonul OK, mesajul va fi afişat în celula A1

Figura 3.4: Caseta de intrare

Page 13: VBA Excel

4. Structura condiţională If….Then….Else în Excel VBA

Editorul Visual Basic (VBE) din MS Excel ca și compilatorul Visual Basic de sine stătător, permit utilizarea acelorași comenzi în programare.

De exemplu, se poate utiliza structura If….Then….Else pentru a controla fluxul unui program care execută o acțiune bazată pe anumite condiții. Pentru a controla fluxul programului, trebuie să se utilizeze operatorii condiționali, precum și operatorii logici.

4.1 Operatorii condiționali

Pentru a controla fluxul de programul VBA, se pot folosi diverși operatori condiționali.Practic, ei seamănă cu operatorii matematici. Operatorii condiționali sunt instrumente foarte puternice, care permit programul VBA să compare valorile datelor și să decidă apoi ce măsuri să ia. De exemplu, se poate decide dacă să execute sau să anuleze execuția unui program. Aceşti operatori sunt prezentați în tabelul 4.1.

Page 14: VBA Excel

Operator Semnificația

= Egal cu

> Mai mult decât

< Mai puţin ca

>= Mai mare si egal cu

<= Mai mic si egal cu

<> Diferit de

Tabel 4.1: Operatori Condiţionali

Cu operatorii de mai sus se pot compara, de asemenea, şiruri de caractere. Se respectă însă regulile: literele majuscule sunt mai mici decât literele minuscule, "A" <"B" <"C" <"D"< … <"Z", iar cifrele sunt mai mici decât literele.

Page 15: VBA Excel

4.3 Utilizarea structurii If...Then...Elseif…Else cu operatori

Pentru a controla în mod eficient fluxul unui program VBA, se poate folosi structura If.....Then.....Elseif….Else, împreună cu operatorii condiționali și operatorii logici. Formatul general pentru structura If...Then...Elseif…Else este:

If conditii ThenExpresii VB

ElseifExpresii VB

ElseExpresii VB

End If

Toate structurile de tip If...Then...Else trebuie sa se termine cu End If. Uneori nu este necesar sa se utilizeze Else sau Elseif.

Page 16: VBA Excel

Exemplu 4.1

Private Sub CommandButton1_Click()Dim firstnum, secondnum As Singlefirstnum = Cells(1, 1).Valuesecondnum = Cells(1, 2).Value

If firstnum > secondnum ThenMsgBox " The first number is greater than the second number"

ElseIf firstnum < secondnum Then

MsgBox " The first number is less than the second number"Else

MsgBox " The two numbers are equal "End If

End If

End Sub

În acest exemplu, programul compară valorile din celulele 1, 1 (A1) și celule 1, 2 (B1) și afișează comentariul adecvat într-o casetă de mesaj. De exemplu, dacă primul număr este de mai mic decât al doilea număr, se va afișa mesajul " The first number is less than the second number ", așa cum se arată în Figura 4.1.

Page 17: VBA Excel

Figura 4.1

Exemplul 4.2

În acest exemplu, programul VBA convertește sistemul de notare cu10 puncte în sistemul de notare cu grade A – F, demonstrând utilizarea liniilor de program If…Then…Elseif.

Page 18: VBA Excel

Private Sub CommandButton1_Click()Dim mark As IntegerDim grade As StringRandomize Timermark = Int(Rnd * 10)Cells(1, 1).Value = markIf mark < 2 And mark >= 0 Thengrade = "F"Cells(2, 1).Value = gradeElseIf mark < 3 And mark >= 2 Thengrade = "E"Cells(2, 1).Value = gradeElseIf mark < 4 And mark >= 3 Thengrade = "D"Cells(2, 1).Value = gradeElseIf mark < 5 And mark >= 4 Thengrade = "C-"Cells(2, 1).Value = grade

ElseIf mark < 6 And mark >= 5 Thengrade = "C"Cells(2, 1).Value = gradeElseIf mark < 7 And mark >= 6 Thengrade = "C+"Cells(2, 1).Value = gradeElseIf mark < 8 And mark >= 7 Thengrade = "B"Cells(2, 1).Value = gradeElseIf mark <= 10 And mark > -8 Thengrade = "A"Cells(2, 1).Value = gradeEnd IfEnd Sub

Page 19: VBA Excel

Funcțiile Rnd și Randomize Timer sunt utilizate pentru a genera numere aleatoare. În scopul de a genera numere întregi aleatoare între 0 și 10, s-au combinat funcțiile Int și Rnd, Int(Rnd * 10). De exemplu, atunci când Rnd = 0.654, atunci Rnd * 10 = 6.54, și Int (6.54) = 6. Utilizarea liniei de program cells(1,1).Value=mark va plasa valoarea de 6 în celula (1,1).

Pe baza valorii din celula A1, folosind structura If...Then...Elseif…Else se poate afișa gradul corespunzătoar în celula A2. Deci, atunci când se face clic pe butonul de comandă, acesta va genera un număr aleator între 1 și 10 și îl plasează în celulele A1 și gradul corespunzător în celula A2. Rezultatul rulării programului este prezentat în figura 4.2.

Figura 4.2.

Page 20: VBA Excel

Exemplu 4.3

Acest exemplu demonstrează utilizarea operatorului Not.

Private Sub CommandButton1_Click()Dim x, y As Integerx = Int(Rnd * 10) + 1y = x Mod 2If Not y = 0 Then

MsgBox " x este număr impar"Else

MsgBox " x este număr par"End If

End Sub

In program, funcţia Rnd este o funcţie aleatoare care produce numere aleatoare cuprinse intre 0 and 1. Astfel Rnd*10 generează un număr aleatoriu cuprins intre 0 and 9. Int este o funcţie VBA care returnează un întreg. De aceea Int(Rnd*10)+1 generează numere aleatoare cuprinse între 1 and 10. Mod este un operator care returnează restul împărţirii a doua numere întregi . Dacă x este un număr par, x Mod 2 va genera valoarea zero. Bazat pe această logică, dacă x Mod 2 este diferit de zero, atunci x este un număr impar, altfel este un număr par.

Page 21: VBA Excel

Exemplu de utilizarea operatorului Not