Sunteți pe pagina 1din 21

3.

Utilizarea Message box i Input box


n Excel VBA exist multe funcii predefinite (built-in) disponibile pe care le putem folosi pentru a eficientiza programele VBA. Printre aceste funcii, exist dou funcii foarte importante i anume caseta de mesaj (Message box) i caseta de intrare (Input box ). Aceste dou funcii sunt utile, deoarece ele fac programul VBA mult mai interactiv. Caseta de intrare permite utilizatorului s introduc datele n timp ce caseta de mesaj afieaz date ieire sau informaii pentru utilizator. Funcia MsgBox () Obiectivul funciei 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 urmtorul: yourMsg=MsgBox(Prompt, Style Value, Title) Primul argument, Prompt, afieaz un mesaj n caseta de mesaj. Style Value determin ce tip de buton de comand va aprea n caseta de mesaj. Tabelul 3.1 prezint butoanele de comand care pot fi afiate. Argumentul Title afieaz titlul casetei de mesaj.

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

Style

Nume Constanta

Buton Afisat

0
1

vbOkOnly
vbOkCancel

Ok button
Ok and Cancel buttons

2
3 4 5

vbAbortRetryIgnore
vbYesNoCancel vbYesNo vbRetryCancel

Abort, Retry and Ignore buttons.


Yes, No and Cancel buttons Yes and No buttons Retry and Cancel buttons

Putem folosi Named Constant (denumirea constantelor) n locul valorilor numerice pentru al doilea argument pentru a face programele mai uor de citit. De fapt, VBA va afia automat o list de Named Constant n cazul n care putei 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 reine valorile care sunt returnate de funcia MsgBox(). Valorile sunt determinate de butonul apsat de utilizator. Trebuie s fie declarat ca tip de date Integer n procedur sau n seciunea declaraii generale. Tabelul 3.2 prezint valorile, denumirea constantelor (Named Constant ) i butoanele corespunztoare.

Value
1 2 3 4 5 6 7

Named Constant
vbOk vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Ok button

Button Clicked

Cancel button Abort button Retry button Ignore button Yes button No button

Tabel 3.2: Valorile Returnate i Butoanele de Comand

Exemplul 3.1 n acest exemplu, mesajul existent n celula (1,2) "Primul tu program VBA (Your first VBA program)" va fi afiat n caseta de mesaj. Deoarece nu se adaug nici un nume de constanta se va afia doar mesajul i butonul "OK", aa 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 nct caseta de mesaj va afia butoanele Yes, No i Cancel, aa cum se arat n figura 3.2. Private Sub CommandButton1_Click() Dim YourMsg As String Cells(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 aduga o pictogram de lng mesajul. Exist patru tipuri de pictograme disponibile n VBE, aa cum se arat n Tabelul 3.3.

Value 16 32 48 vbCritical

Named Constant

Icon

vbQuestion vbExclamation

64

vbInformation
Tabel 3.3 Pictograme disponibile n Message box

Exemplul 3.3 Codul din acest exemplu este n esen acelai ca i n exemplul 3.2, dar este adugat ca al treilea argument, constanta cu numele vbExclamation. Cele dou constante de nume pot fi unite cu ajutorul semnul "+". Caseta de mesaj va afia acum pictograma cu semnul de exclamare, aa cum se arat n Figura 3.3. Private Sub CommandButton1_Click() Dim YourMsg As String Cells(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 apsat de utilizator pe baza valorilor returnate prezentate n tabelul 3.2. n Exemplul 3.4 este folosit structura condiional If .... Then ... Else. (se va explica mai trziu)

Exemplul 3.4 Private Sub CommandButton1_Click() Dim testMsg As Integer testMsg = MsgBox(" Apasa pentru un test", vbYesNoCancel + vbExclamation, " Mesaj Test") If testMsg = 6 Then Cells(1,1).Value = " S-a apasat butonul Yes" ElseIf testMsg = 7 Then Cells(1,1).Value = " S-a apasat butonul No " Else Cells(1,1).Value = " S-a apasat Cancel " End If End Sub

3.2 Funcia InputBox () O caset InputBox() este o funcie care afieaz 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 primete mesajul introdus de ctre utilizatori. Argumentele au urmtoarele semnificaii:

Prompt Title default-text x-position and y-position

Mesajul afiat n inputbox (caseta de intrare ). Titlul casetei de intrare Textul implicit care apare in cmpul de intrare pe care utilizatorii l utilizeaz ca o valoare de intrare probabil sau pe care l pot eventual schimba cu alt valoare Poziia sau coordonatele casetei de intrare

Exemplul 3.5 Ecranul afiat de programul din exemplu 3.5 este prezentat n Figura 3.4 Private Sub CommandButton1_Click() Dim userMsg As String userMsg = InputBox(" Care este mesajul dumneavoastr?", " Formular de introducere date ", "Introduceti mesajul aici", 500, 700) Cells(1,1).Value=userMsg End Sub Atunci cnd utilizatorul face clic pe butonul OK, va aprea o caseta de intrare aa cum se arat n Figura 3.4. Se observ c titlul casetei de intrare este "Formular de introducere date" i mesajul afiat de prompter este "Care este mesajul dumneavoastr". Dup ce utilizatorul introduce mesajul i clic pe butonul OK, mesajul va fi afiat n celula A1

Figura 3.4: Caseta de intrare

4. Structura condiional If.Then.Else n Excel VBA


Editorul Visual Basic (VBE) din MS Excel ca i compilatorul Visual Basic de sine stttor, permit utilizarea acelorai comenzi n programare.

De exemplu, se poate utiliza structura If.Then.Else pentru a controla fluxul unui program care execut o aciune bazat pe anumite condiii. Pentru a controla fluxul programului, trebuie s se utilizeze operatorii condiionali, precum i operatorii logici.
4.1 Operatorii condiionali Pentru a controla fluxul de programul VBA, se pot folosi diveri operatori condiionali. Practic, ei seamn cu operatorii matematici. Operatorii condiionali sunt instrumente foarte puternice, care permit programul VBA s compare valorile datelor i s decid apoi ce msuri s ia. De exemplu, se poate decide dac s execute sau s anuleze execuia unui program. Aceti operatori sunt prezentai n tabelul 4.1.

Tabel 4.1: Operatori Condiionali Operator = > Egal cu Mai mult dect Semnificaia

<
>= <= <>

Mai puin ca
Mai mare si egal cu Mai mic si egal cu Diferit de

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

4.3 Utilizarea structurii If...Then...ElseifElse cu operatori


Pentru a controla n mod eficient fluxul unui program VBA, se poate folosi structura If.....Then.....Elseif.Else, mpreun cu operatorii condiionali i operatorii logici. Formatul general pentru structura If...Then...ElseifElse este: If conditii Then Expresii VB Elseif Expresii VB Else Expresii 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 Single firstnum = Cells(1, 1).Value secondnum = Cells(1, 2).Value If firstnum > secondnum Then MsgBox " The first number is greater than the second number" Else If 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 afieaz comentariul adecvat ntr-o caset de mesaj. De exemplu, dac primul numr este de mai mic dect al doilea numr, se va afia mesajul " The first number is less than the second number ", aa cum se arat n Figura 4.1.

Figura 4.1

Exemplul 4.2 n acest exemplu, programul VBA convertete sistemul de notare cu10 puncte n sistemul de notare cu grade A F, demonstrnd utilizarea liniilor de program IfThenElseif.

Private Sub CommandButton1_Click() Dim mark As Integer Dim grade As String Randomize Timer mark = Int(Rnd * 10) Cells(1, 1).Value = mark If mark < 2 And mark >= 0 Then grade = "F" Cells(2, 1).Value = grade ElseIf mark < 3 And mark >= 2 Then grade = "E" Cells(2, 1).Value = grade ElseIf mark < 4 And mark >= 3 Then grade = "D" Cells(2, 1).Value = grade ElseIf mark < 5 And mark >= 4 Then grade = "C-"

Cells(2, 1).Value = grade ElseIf mark < 6 And mark >= 5 Then grade = "C" Cells(2, 1).Value = grade ElseIf mark < 7 And mark >= 6 Then grade = "C+" Cells(2, 1).Value = grade ElseIf mark < 8 And mark >= 7 Then grade = "B" Cells(2, 1).Value = grade ElseIf mark <= 10 And mark > -8 Then grade = "A" Cells(2, 1).Value = grade End If End Sub

Funciile 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 funciile Int i Rnd, Int(Rnd * 10). De exemplu, atunci cnd 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...ElseifElse se poate afia gradul corespunztoar n celula A2. Deci, atunci cnd se face clic pe butonul de comand, acesta va genera un numr aleator ntre 1 i 10 i l plaseaz n celulele A1 i gradul corespunztor n celula A2. Rezultatul rulrii 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 Integer x = Int(Rnd * 10) + 1 y = x Mod 2 If Not y = 0 Then MsgBox " x este numr impar" Else MsgBox " x este numr par" End If End Sub In program, funcia Rnd este o funcie aleatoare care produce numere aleatoare cuprinse intre 0 and 1. Astfel Rnd*10 genereaz un numr aleatoriu cuprins intre 0 and 9. Int este o funcie 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 mpririi a doua numere ntregi . Dac x este un numr par, x Mod 2 va genera valoarea zero. Bazat pe aceast logic, dac x Mod 2 este diferit de zero, atunci x este un numr impar, altfel este un numr par.

Exemplu de utilizarea operatorului Not