Documente Academic
Documente Profesional
Documente Cultură
Style
Nume Constanta
Buton Afisat
0
1
vbOkOnly
vbOkCancel
Ok button
Ok and Cancel buttons
2
3 4 5
vbAbortRetryIgnore
vbYesNoCancel vbYesNo vbRetryCancel
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
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
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
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
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:
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
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.
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