VBA Excel
-
Upload
mihai-andrei -
Category
Documents
-
view
38 -
download
0
description
Transcript of 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.
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
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.
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ă
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
Figura 3.1: Caseta de mesaj ”Message box” cu buton OK
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
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
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
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
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
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
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.
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.
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.
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.
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.
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
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.
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.
Exemplu de utilizarea operatorului Not