Proiectare Asistata Pe Calculator
-
Upload
dumitru-andreea -
Category
Documents
-
view
285 -
download
1
Transcript of Proiectare Asistata Pe Calculator
-
8/6/2019 Proiectare Asistata Pe Calculator
1/44
PROIECTARE ASISTATA DE CALCULATOR
UTILIZAREA LIMBAJULUI VBA PENTRU CONSTRUIREA DEMACROFUNCTII IN EXCEL TM
-
8/6/2019 Proiectare Asistata Pe Calculator
2/44
MODIFICAREA NUMELUI SHEET-URILOR
La deschiderea unui workbook EXCEL sheet-urile componente au denumirea implicitaSheet1, Sheet2,Sheet3, etc.
Pentru a redenumi un sheet cursorul mouse-ului se pozitioneaza in dreptul sheet-ului a carui nume se dorestemodificat (bara de nume a sheet-urilor amplasata in partea de jos a ecranului) si se face dublu-click pe
butonl din stinga al mouse-ului. Prin aceasta operatie caseta sheet-ului selectat se inegreste.
Se tasteaza numele dorit urmat de Enter
2
-
8/6/2019 Proiectare Asistata Pe Calculator
3/44
In acest mod utilizatorul poate redenumi sheet-urile aplicatiei pentru a le putea gestiona mai usor continutul.
Daca se doreste introducerea unui sheet suplimentar atunci din meniul Insert se selecteaza Worksheet:
3
-
8/6/2019 Proiectare Asistata Pe Calculator
4/44
MACRO-URI REALIZATE IN VBAEXCEL prezinta facilitatea de a permite dezvoltarea de aplicatii complexe (macro-uri) utilizind limbajul de
programare VBA (Visual Basic Application) o varianta a limbajului Visual Basic.In vederea scrierii unui macro trebuie sa fie activat editorul Visual Basic:
In urma activarii editorului Visual Basic se deschide un ecran in care trebuie sa fie inserat un modul in caresa fie editata aplicatia:
Prin inserarea modulului se poate incepe scrierea aplicatiilor. Cele mai curente aplicatii sunt de tipSubrutina:
Sub NumeSubrutina
4
-
8/6/2019 Proiectare Asistata Pe Calculator
5/44
Numele subrutinei este dat de utilizator. Prin tastare Enter dupa nume editorul VBA introduce automatcomanda de incheiere a subrutinei:
Intre cele doua instructiuni se introduc toate comenzile (instructiunile) care formeaza programul dorit.
Numarul de subrutine care se pot scrie in cadrul unui modul nu este limitat. De asemenea, in cazul in care sedoreste o structurare a subrutinelor mai riguroasa se pot initializa mai multe Module prin aceleasi procedurica la inserarea primului modul.
5
-
8/6/2019 Proiectare Asistata Pe Calculator
6/44
.
Un modul poate fi sters prin activarea lui (click mouse pe numele lui) urmata de comanda Removeactivata din meniul principal al editorului
O structura generala a unei aplicatii inclusa intr-o subrutina este:
1. Bloc pentru definirea marimii maxime a variabilelor de tip vector sau matrice utilizate in program
2. Citirea datelor necesare programului din sheet-uri ale aplicatiei sau din fisiere externe
3. Blocul de calcul in care se executa operatiile dorite specifice aplicatiei
4. Scrierea datelor rezultate la punctul 3 in sheet -urile workbok-ului sau in fisiere externe .
VARIABILE
In cadrul unui program (subrutina, functie) realizat utilizind limbajul VBA ca Macro in EXCEL suntutilizate variabile in care se stocheaza informatia dorita.
O prima clasificare a variabilelor este dupa numarul lor de componente: scalare, vectoriale, matriciale.
6
-
8/6/2019 Proiectare Asistata Pe Calculator
7/44
Variabilele se pot clasifica de asemenea dupa continutul lor in variabile numerice, de tip text sau mixte(variabile vectoriale sau matriciale in care elementele componente pot fi de tip text sau numar).
Variabile scalareO variabila scalara are o singura componenta. Spre exemplu X = 1 atribuie variabilei denumite X valoarea 1.
Variabilele vectorialeVariabilele vectoriale sunt utilizate atunci cind sub acelasi nume sunt stocate mai multe date organizate subforma de coloana sau rind.Spre exemplu stocarea intr-o singura variabila denumita CURS_Valutar a valorilor cursului Leu - $ dintr-un sir de zile se poate face atribuind variabilei dorite elemente diferite diferentiate prin valoarea inclusa intre
paranteze, conform schemei prezentate in figura de mai jos. Transferul datelor din sheet in program se face printr-o secventa de instructiuni descrisa in capitolul de citire/scriere a datelor in sheet-uri ( Exemplul 2 )
Pentru operarea cu variabile de tip vectorial trebuie sa fie definit la inceputul programului- numarul maximde valori care vor fi stocate (in cazul exemplului prezentat: 19) prin utilizarea instructiunii Dim:
Dim CURS_Valutar(19)
Variabile matricialeVariabilele matriciale indexeaza sub acelasi nume informatiile cuprinse in tabele care au mai multe coloane.In figura de mai jos este reprezentat modul in care poate fi stocata intr-o variabila matriciala X (definita incadrul unui Macro) valorile datei si cursurilor valutare Leu-$ si Leu-Euro incluse intr-un sheet EXCEL.Valorile prezentate in chenar reprezinta elementele de identificare a variabilei matriciale. Spre exemplu:X(1,1)=29.12.2004, X(1,2)=28919, s.a.m.d. Practic programul opereaza ca si cum cele doua tabele ar fisuprapuse: tabelul cu identificarea rindurilor si coloanelor la baza, strat peste care se afla cimpul de valori.Transferul datelor din sheet in program se face printr-o secventa de instructiuni descrisa in capitolul decitire/scriere a datelor in sheet-uri ( Exemplul 3 )
7
-
8/6/2019 Proiectare Asistata Pe Calculator
8/44
Pentru operarea cu variabile de tip matricial trebuie sa fie definit la inceputul programului- numarulmaxim de valori care vor fi stocate (in cazul exemplului prezentat: 19 rinduri si 3 coloane) prin utilizareainstructiunii Dim:
Dim X(19,3)
Variabile numericeO variabila numerica are ca valori numere care pot fi intregi (1,1001, 23456 etc.) sau zecimale (reprezentatin Simpla sau Dubla precizie)
Variabile text
O variabila text contine un sir de caractere (numerice sau alfabetice cu exceptia ghilimelelor). Caracterelevariabilei de tip text sunt stocate in aplicatiile VBA intre ghilimele (). Spre exemplu 12wer_s456, sdgfbje.
Numele unei variabile de tip text (in cazul in care se doreste explicitarea tipului de variabila) trebuie sa seincheie cu simbolul $ (spre exemplu: a$, Text$). Variabilele de tip text pot fi supuse unor operatii decoincatenare sau segmentare in cadrul programelor realizate ca Macro-uri
OPERATII CU SHEET-uri
MODIFICAREA CARACTERISTICILOR ELEMENTELOR COMPONENTE
Din interiorul unei aplicatii de tip VBA (Macro) pot fi comandate operatii pentru modificareacaracteristicilor elementelor componente: celule, rinduri, coloane.In acest scop este necesar in primul rind sa fie activat Sheet-ul ale carui elemente vor fi controlate prinaplicatie.
Specificarea numelui sheet-ului din/in care se face citirea/scrierea datelor prin utilizarea comenzii: With ,urmata de specificarea obiectului asupra caruia se executa comanda: Sheets instantiat pentru numele sheet-ului dorit: Nume Sheet:
With Sheets( Nume Sheet )
Spre exemplu, daca sheet-ul in care se doreste citirea/scrierea datelor are numele Sheet1 atunciinstructiunea va avea forma:
8
-
8/6/2019 Proiectare Asistata Pe Calculator
9/44
With Sheets(Sheet1)
Daca sheet-ul are numele Input atunci forma instructiunii va fi:
With Sheets(Input)
Pentru a numi sheet-urile dintr-o aplicatie vezi capitolul Modificarea numelui Sheet-urilor
Numele sheet-ului poate fi specificat si prin intermediul unei variabile de tip text definita anterior in program. Astfel, secventa de instructiuni:
a$ = InputWith Sheets(a$)
va instantia sheet-ul Input. Avantajul unui astfel de mod de apelare il reprezinta flexibilitatea inconstructia variabilei de tip text.
Instructiunea With se incheie cu instructiunea End With. Intre cele doua instructiuni trebuie inserate
comenzile referitoare la manipularea elementelor componente ale sheet-ului (celule, rinduri, coloane):With Sheets( Nume Sheet )
{Bloc de instructiuni}
End With
Celule
Exista trei moduri de apelare si editare a caracteristicilor unei celule dintr-un sheet specificat :
1. Folosind instructiunea With urmata de clasele de obiecte asupra careia se aplica: Pentru identificarea celulei ale carei caracteristici se editeaza, clasa de obiecte este Cells .
Instantierea celulei dorite se face prin specificarea coordonatelor ei si anume: Rind siColoana :
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
{Bloc de instructiuni}
End WithEnd With
Rind este un numar sau variabila numerica care reprezinta rindul celulei care se citeste. Spreexemplu pentru celula A1 rindul este 1, pentru celula C5 rindul este 5.Coloana este un numar sau variabila numerica reprezinta numarul de ordine al coloaneicelulei care se citeste: pentru A numarul este 1, pentru B -2, C -3, s.a.m.d.In acest mod celula M5 va fi inclusa in instructiune sub forma .Cells(5,13), celula N7:.Cells(7,14), etc.
Editarea caracteristicilor celulelor se face prin utilizarea claselor de obiecte corespunzatoare:Font pentru modificarea fontului, Interior pentru modificarea fundalului, NumberFormat
9
-
8/6/2019 Proiectare Asistata Pe Calculator
10/44
pentru tipul de informatii din celula (numere, text, etc). Modul de apelare a acestor clase deobiecte se bazeaza pe utilizarea caracterului . pentru legarea de clasa de obiecte ierarhicsuperioara (in acest caz Cells). Apelarea clasei de editare este urmata de specificarea tipuluide operatie care se executa. Exemplele urmatoare acopera cea mai mare parte a posibilitatilor de editare posibil de a fi controlate prin acest procedeu:
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este scris cucaractere ingrosate (bold):
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Bold = TrueEnd With
End With
o Dezactivarea din textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet a stilului de scriere cu caractere ingrosate (bold):
With Sheets ( NumeSheet )With Cells ( Rind , Coloana ).Font.Bold = False
End WithEnd With
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este scris cucaractere italice (italic):
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Italic = TrueEnd With
End With
Pentru dezactivarea stilului italic se inlocuieste valoarea logica True cu False
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este subliniatcu linie simpla (underline):
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Underline = xlUnderlineStyleSingleEnd With
End With
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este subliniatcu linie dubla (underline):
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Underline = xlUnderlineStyleDouble
End WithEnd With
10
-
8/6/2019 Proiectare Asistata Pe Calculator
11/44
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este scris cufonturi a caror culoare este specificata:
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Color = ColorNumber End With
End With
ColorNumber este un numar asociat fiecarei culori. Figura urmatoare prezintanumerele atasate fiecarei culori care poate fi selectata din meniul Font Color al sheet-urilor EXCEL:
Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este scris cufonturi al caror stil este specificat:
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Name = FontNameEnd With
End With
FontName este numele fontului specificat in caseta de selectare a fontului din meniul principal alsheet-urilor:
Spre exemplu pentru Arial:
11
-
8/6/2019 Proiectare Asistata Pe Calculator
12/44
.Font.Name = Arial pentru Times New Roman:
.Font.Name = Times New Roman pentru Symbol:
.Font.Name = Symbol
o Textul din celula specificata prin Rind, Coloana din Sheet-ul NumeSheet este scris cufonturi a caror marime este specificata:
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Size = Number End With
End With
unde Number este un numar egal cu marimea fontului
o
Culoarea fundalului celulei specificate prin Rind, Coloana din Sheet-ul NumeSheet poate fi modificata prin instructiunile:
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Interior.Color = ColorNumber End With
End With
ColorNumber este un numar asociat fiecarei culori identic cu cel prezentat laschimbarea culorii fontului.
o Continutul celulei specificate prin Rind, Coloana din Sheet-ul NumeSheet corespundeunui tip specificat de utilizator:
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.NumberFormat = TipFormatEnd With
End With
unde pentru principalele tipuri de variabile:
TipFormat = "0.00" pentru scrierea variabilelor numerice cu un numar de zecimale specificat deutilizator. Numarul de zecimale scris este egal cu numarul de zerouri dupacaracterul .. Astfel pentru 0.00 vor fi scrise 2 zecimale, pentru 0.000 vor fi 3zecimale s.a.m.d.
TipFormat = "m/d/yyyy" pentru scrierea unei variabile de tip data calendaristica
TipFormat = "0.00%" pentru scrierea unei variabile de tip procent. Numarul de zerouri dupacaracterul . reprezinta numarul de zecimale care sunt scrise
TipFormat = "0.00E+00" pentru scrierea unei variabile numerice in format stiintific
TipFormat = "@"
12
-
8/6/2019 Proiectare Asistata Pe Calculator
13/44
pentru scrierea unei variabile de tip text
2. Apelind direct clasa de obiecte Cells corespunzatoare Sheet-ului instantiat anterior utilizind metodagenerala din limbajul VBA prin care legatura intre doua clase subordonate se face prin caracterul ..In acest caz clasa de nivel superior este Sheets, iar clasa subordonata este Cells. Toate comenzilespecificate la punctul 1 pot fi scrise in acest mod. Spre exemplu:
With Sheets(NumeSheet).Cells(Rind, Coloana) .Font.Bold = True
End With
3. Prin selectarea sheet-ului si celulelor utilizind instructiunea Select.
Selectarea unui sheet se face sub forma:
Sheets (VariabilaText ).Select
Aceasta instructiune poate fi tradusa in limbaj obisnuit prin expresia:Din clasa de obiecte Sheets se selectioneaza sheet-ul al carui nume este VariabilaText .Sheet-ul selectionat devine activ in cadrul aplicatiei.
Spre exemplu activarea Sheet-ului Input se poate face sub una din formele:
A$ = InputSheets (A$). Select
Sau
Sheets (Input). Select
Selectarea unei celule sau grup de celule se face aplicind operatia Select asupra clasei deobiecte Range actualizata pentru domeniul dorit:
Range (VariabilaText ).Select
unde VariabilaText reprezinta domeniul celulelor al caror continut se doreste modificat. Spreexemplu, daca se doreste selectarea domeniului A1:B5 atunci:
a$ = A1:B5Range (a$). Select
Actiunea acestei instructiuni este similara cuselectarea fizica a celulelor din sheet-ul considerat.
Selectiei efectuate in acest mod ii pot fi asociate, similar procedurilor descrise la punctul 1,operatiile asociate claselor Font , Interior sau NumberFormat . Exemplul urmator esteedificator in acest sens:
13
-
8/6/2019 Proiectare Asistata Pe Calculator
14/44
A$ = InputSheets(A$).SelectB$ = A1:B10Range(B$).SelectSelection .Font.Bold=TrueSelection .Font.Color=5
Se constata ca operatiile definite la punctul 1 se aplica clasei de obiecte Selection In plus fata de operatiile definite la punctul 1 se pot efectua operatii de incadrare in chenare acelulelor din domeniul selectat. Exemplele urmatoare arata modul de folosire a instructiuniiBorders aplicata unui domeniu de celule selectat prin instructiunea Range
Chenar la partea inferioara (bottom) a celulelor:
Sheets("Sheet1").SelectRange("B2:D2").Select
With Selection.Borders( xlEdgeBottom ).LineStyle = xlContinuous.Weight = xlThin.ColorIndex = xlAutomatic
End With
Chenar la stinga (left) domeniului:
Sheets("Sheet1").SelectRange("B2:D2").SelectWith Selection.Borders( xlEdgeLeft )
.LineStyle = xlContinuous.Weight = xlMedium
.ColorIndex = xlAutomaticEnd With
Chenar deasupra (top) domeniului:
Sheets("Sheet1").SelectRange("B2:D2").SelectWith Selection.Borders( xlEdgeTop )
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomaticEnd With
Chenar la dreapta (right) domeniului:Sheets("Sheet1").SelectRange("B2:D2").SelectWith
Selection.Borders( xlEdgeRight ).LineStyle = xlContinuous.Weight = xlMedium.ColorIndex = xlAutomatic
End With
14
-
8/6/2019 Proiectare Asistata Pe Calculator
15/44
Diagonale peste domeniu - 1:Sheets("Sheet1").SelectRange("B2:D6").SelectWith
Selection.Borders(xl DiagonalDown ).LineStyle = xlContinuous.Weight = xlMedium.ColorIndex = xlAutomatic
End With
Diagonale peste domeniu - 2:Sheets("Sheet1").SelectRange("B2:D6").SelectWith
Selection.Borders(xl DiagonalUp ).LineStyle = xlContinuous.Weight = xlMedium
.ColorIndex = xlAutomaticEnd With
Linii interioare verticale peste domeniu:Sheets("Sheet1").SelectRange("B2:D6").SelectWith
Selection.Borders(xl InsideVertical ).LineStyle = xlContinuous.Weight = xlMedium.ColorIndex = xlAutomatic
End With
Linii interioare orizontale peste domeniu:Sheets("Sheet1").SelectRange("B2:D6").SelectWith
Selection.Borders(xl InsideHorizontal ).LineStyle = xlContinuous.Weight = xlMedium.ColorIndex = xlAutomatic
End With
In setul de instructiuni pentru realizarea chenarelor daca in loc de :
.Weight = xlMedium
se foloseste instructiunea:
.Weight = xlThin
liniile din chenar vor fi subtiri.
De asemenea, daca se inlocuieste:
.ColorIndex = xlAutomatic
15
-
8/6/2019 Proiectare Asistata Pe Calculator
16/44
cu instructiunea:
.ColorIndex = ColorNumber
unde ColorNumber este codul de culoare .
In cazul in care se doreste stergerea liniei in locul instructiunii:
.LineStyle = xlContinuous
se va utiliza:
.LineStyle = xlNone
Coloane
Exista aceleasi trei moduri de apelare si editare a caracteristicilor unei selectii de coloane dintr-un sheet
specificat ca si in cazul celulelor :1. Folosind instructiunea With urmata de clasele de obiecte asupra careia se aplica: Pentru identificarea coloanei ale carei caracteristici se editeaza, clasa de obiecte este
Columns . Instantierea coloanei dorite se face prin specificarea coordonatelor ei:
With Sheets ( NumeSheet )With Columns (Coloana )
{Bloc de instructiuni}
End WithEnd With
unde Coloana este numarul de ordine al coloanei: pentru coloana A : 1, pentru B: 2, s.a.m.d.Editarea caracteristicilor coloanelor se face prin utilizarea claselor de obiectecorespunzatoare: Font pentru modificarea fontului, Interior pentru modificarea fundalului,NumberFormat pentru tipul de informatii din celula (numere, text, etc). Modul de apelare aacestor clase de obiecte se bazeaza pe utilizarea caracterului . pentru legarea de clasa deobiecte ierarhic superioara (in acest caz Columns). Apelarea clasei de editare este urmata despecificarea tipului de operatie care se executa, similar cazului celulelor: in instructiunile
prezentate pentru editarea celulelor se va inlocui clasa de obiecte .Cells cu clasa .Columns .Spre exemplu, instructiunile
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Bold = TrueEnd With
End With
De la editarea celulelor se vor inlocui cu:
With Sheets ( NumeSheet )
With Columns (Coloana ).Font.Bold = TrueEnd With
End With
16
-
8/6/2019 Proiectare Asistata Pe Calculator
17/44
2. Apelind direct clasa de obiecte Columns corespunzatoare Sheet-ului instantiat anterior utilizindmetoda generala din limbajul VBA prin care legatura intre doua clase subordonate se face princaracterul .. In acest caz clasa de nivel superior este Sheets, iar clasa subordonata esteColumns. Toate comenzile specificate la punctul 1 pot fi scrise in acest mod. Spre exemplu:
With Sheets(NumeSheet).Columns( Coloana ).Font.Bold = True
End With
3. Prin selectarea sheet-ului si celulelor utilizind instructiunea Select.
Selectarea unui sheet se face sub forma:
Sheets (VariabilaText ).Select
Aceasta instructiune poate fi tradusa in limbaj obisnuit prin expresia:Din clasa de obiecte Sheets se selectioneaza sheet-ul al carui nume este VariabilaText .
Sheet-ul selectionat devine activ in cadrul aplicatiei.
Spre exemplu activarea Sheet-ului Input se poate face sub una din formele:
A$ = InputSheets (A$). Select
Sau
Sheets (Input). Select
Selectarea unei coloane sau grup de coloane se face aplicind operatia Select asupra clasei deobiecte Columns actualizata pentru domeniul dorit:
Columns (VariabilaText ).Select
unde VariabilaText reprezinta domeniul coloanelor al caror continut se doreste modificat.Spre exemplu, daca se doreste selectarea coloanelor A:D atunci:
a$ = A:DRange (a$). Select
Selectiei efectuate in acest mod ii pot fi asociate, similar procedurilor descrise la punctul 1,operatiile asociate claselor Font , Interior sau NumberFormat (vezi punctul 3 de la editareacelulelor ).
Rinduri
Exista aceleasi trei moduri de apelare si editare a caracteristicilor unei selectii de rinduri dintr-un sheetspecificat ca si in cazul celulelor :
1. Folosind instructiunea With urmata de clasele de obiecte asupra careia se aplica: Pentru identificarea coloanei ale carei caracteristici se editeaza, clasa de obiecte este Rows .
Instantierea rindului dorite se face prin specificarea coordonatelor ei: With Sheets ( NumeSheet )
With Rows ( Rind )17
-
8/6/2019 Proiectare Asistata Pe Calculator
18/44
{Bloc de instructiuni}
End WithEnd With
unde Rind este numarul de ordine al rindului.Editarea caracteristicilor rindurilor se face prin utilizarea claselor de obiecte corespunzatoare:Font pentru modificarea fontului, Interior pentru modificarea fundalului, NumberFormat
pentru tipul de informatii din celula (numere, text, etc). Modul de apelare a acestor clase deobiecte se bazeaza pe utilizarea caracterului . pentru legarea de clasa de obiecte ierarhicsuperioara (in acest caz Rows). Apelarea clasei de editare este urmata de specificarea tipuluide operatie care se executa, similar cazului celulelor: in instructiunile prezentate pentrueditarea celulelor se va inlocui clasa de obiecte .Cells cu clasa .Rows . Spre exemplu,instructiunile
With Sheets ( NumeSheet )With Cells ( Rind , Coloana )
.Font.Bold = TrueEnd WithEnd With
De la editarea celulelor se vor inlocui cu:
With Sheets ( NumeSheet )With Rows ( Rind )
.Font.Bold = TrueEnd With
End With
2. Apelind direct clasa de obiecte Rows corespunzatoare Sheet-ului instantiat anterior utilizind metodagenerala din limbajul VBA prin care legatura intre doua clase subordonate se face prin caracterul ..In acest caz clasa de nivel superior este Sheets, iar clasa subordonata este Rows. Toatecomenzile specificate la punctul 1 pot fi scrise in acest mod. Spre exemplu:
With Sheets(NumeSheet).Rows( Rind ).Font.Bold = True
End With
3. Prin selectarea sheet-ului si celulelor utilizind instructiunea Select.
Selectarea unui sheet se face sub forma:
Sheets (VariabilaText ).Select
Aceasta instructiune poate fi tradusa in limbaj obisnuit prin expresia:Din clasa de obiecte Sheets se selectioneaza sheet-ul al carui nume este VariabilaText .Sheet-ul selectionat devine activ in cadrul aplicatiei.
Spre exemplu activarea Sheet-ului Input se poate face sub una din formele:
A$ = InputSheets (A$). Select
18
-
8/6/2019 Proiectare Asistata Pe Calculator
19/44
Sau
Sheets (Input). Select
Selectarea unui rind sau grup de rinduri se face aplicind operatia Select asupra clasei deobiecte Rows actualizata pentru domeniul dorit:
Rows (VariabilaText ).Select
unde VariabilaText reprezinta domeniul rindurilor al caror continut se doreste modificat. Spreexemplu, daca se doreste selectarea rindurilor 1:5 atunci:
a$ = 1:5Range (a$). Select
Selectiei efectuate in acest mod ii pot fi asociate, similar procedurilor descrise la punctul 1,operatiile asociate claselor Font , Interior sau NumberFormat (vezi punctul 3 de la editareacelulelor ).
CITIREA SI SCRIEREA DATELOR IN SHEET-uri
Aplicatiile realizate in VBA (subrutine, functii, etc.) necesita comunicarea datelor de intrare (din sheet-uriEXCEL) catre aplicatie si scrierea valorilor calculate in aplicatie in sheet-uri EXCEL.
Instructiunile care realizeaza citirea/scrierea datelor din/in sheet-uri realizeaza urmatorii pasi:
1. Specificarea numelui sheet-ului din/in care se face citirea/scrierea datelor prin utilizarea comenzii:With , urmata de specificarea obiectului asupra caruia se executa comanda;
2. Citirea datelor dintr-un sheet reprezinta alocarea continutului unei celule din sheet unei variabile dininteriorul programului (aplicatiei VBA). Astfel, instructiunea pentru transferarea continutului dincelula A1 variabilei X este:
X = .Cells(1,1).Value
In acest mod se transfera valoarea din dreapta semnului egal (continutul celulei A1) variabilei dinstinga semnului = (X).
Forma generala a instructiunii este:
NumeVariabila = .Cells(Rind, Coloana).Value
NumeVariabila este numele dat variabilei in cadrul subrutinei respective (X, Y, etc.) Rind este un numar sau variabila numerica care reprezinta rindul celulei care se citeste. Spre exemplu pentru celula A1 rindul este 1, pentru celula C5 rindul este 5.Coloana este un numar sau variabila numerica reprezinta numarul de ordine al coloanei celulei carese citeste: pentru A numarul este 1, pentru B -2, C -3, s.a.m.d.In acest mod celula M5 va fi inclusa in instructiune sub forma .Cells(5,13), celula N7:.Cells(7,14), etc.
.Cells reprezinta apelarea obiectului Cells corespunzator obiectului Sheet instantiat prin instructiuneaWith. Punctul . Din fata numelui obiectului Cells reprezinta legatura cu clasa de obiecte ierarhic
19
-
8/6/2019 Proiectare Asistata Pe Calculator
20/44
superioare (Sheet) instantiate anterior. Similar punctul plasat dupa instructiunea Cells(Rind, Coloana)arata ca instructiunea care urmeaza (in acest caz Value) se refera la celula instantiata anterior.
In mod similar transferarea ( scrierea ) continutului variabilei Y in celula B3 spre exemplu se face prin instructiunea:
.Cells(3,2).Value = Y
Instructiunea generala este:
.Cells(Rind, Coloana).Value = NumeVariabila Din nou se remarca faptul ca se atribuie ceea ce se afla in dreapta semnului = (valoarea stocata in
NumeVariabila) la ceea ce se afla in stinga (continutul celulei specificate)
3. Se inchide instructiunea With deschisa la pasul 1 prin instructiunea:
End With
In continuare sunt prezentate citeva exemple de secvente de instructiuni pentru citirea/scrierea datelor din/in sheet-uri.
Exemplul 1.Atribuirea continutului celulei A1 din Sheet-ul Input variabilei X si continutului celulei B4variabilei Y
With Sheets(Input)X = .Cells(1,1).ValueY = .Cells(4,2).Value
End With
Similar, daca se doreste scrierea variabilelor X si Ycalculate in program in celulele A1 si B4 dinSheet-ul Ouput secventa de instructiuni este:With Sheets(Output)
.Cells(1,1).Value = X
.Cells(4,2).Value = YEnd With
Exemplul 2.Atribuirea continutului mai multor celule organizate in coloana unei variabile de tip vector
denumita CURS_Valutar
Dim CURS_Valutar(19)With Sheets(Input)
For i = 1 TO 19CURS_Valutar(i) = .Cells(i+1 , 2).Value
Next iEnd With
In acest exemplu se remarca utilizarea instructiunii de ciclareFor: variabila I ia valori intre 1 si 19. Pentru fiecare valoare I
20
-
8/6/2019 Proiectare Asistata Pe Calculator
21/44
se atribuie variabilei CURS_Valutar(i) continutul celulei avind rindul i+1 (+1 deoarece rindul 1 este destinatcapului de tabel) si coloana 1 (A).Algoritmul poate fi scris si sub forma:
Dim CURS_Valutar(19) N = 19With Sheets(Input)
For i = 1 TO NCURS_Valutar(i) = .Cells(i+1 , 2).Value
Next iEnd With
In acest mod numarul de citiri (19) este inclus intr-o variabila distincta (N) fiind crescuta flexibilitatea programului.
Exemplul 3.Atribuirea continutului mai multor celule organizate in mai multe rinduri si coloane unei variabile de tip
matrice denumita X
Dim X(19,3)With Sheets(Input)
For I = 1 TO 19For J = 1 TO 3
X(I , J) = .Cells(I+1, J).ValueNext J
Next IEnd With
In cazul in care variabila matriciala X se definestespecificind intii coloana si apoi rindul se poate scrie unalgoritm similar:
Dim X(3,19)With Sheets(Input)
For I = 1 TO 3For J = 1 TO 19
X(I , J) = .Cells(J+1 , I).ValueNext J
Next IEnd With
Exemplul 4.Atribuirea continutului mai multor celule organizate incoloana unei variabile de tip vector
denumita CURS_Valutar. Spre deosebire de Exemplu 2 nuse cunoaste numarul de elemente din coloana care urmeazaa fi citita. In acest caz citirea se va face crescind numarul deordine al rindului citit (i1) atita timp cit ( While) continutul
celulei corespunzatoare nu este nul (continutul nul estesimilar cu variabila text nula: )
21
-
8/6/2019 Proiectare Asistata Pe Calculator
22/44
With Sheets("Input")i1 = 1While .Cells(i1+1, 1) ""
X(i1) = .Cells(i1+1, 1).Valuei1 = i1 + 1
Wendn = i1 - 1
End With
Acelasi algoritm se poate scrie utilizind secventa de instructiuni DO WHILE / LOOP sub forma:
With Sheets("Input")i1 = 1
Do While .Cells(i1+1, 1) ""X(i1) = .Cells(i1+1, 1).Valuei1 = i1 + 1
Loopn = i1 - 1
End WithAcelasi rezultat se obtine si prin folosirea algoritmului bazat pe secventa de instructiuni DO UNTIL /LOOP:
With Sheets("Input")i1 = 1
Do Until .Cells(i1+1, 1) = ""X(i1) = .Cells(i1+1, 1).Valuei1 = i1 + 1
Loop
n = i1 - 1End With
CITIREA SI SCRIEREA DATELOR DIN / IN FISIERE EXTERNE
In numeroase cazuri datele necesare rularii unui model sunt stocate in fisiere exterioare de tip text (codASCII format care nu contine formatarea textelor fiind in acest mod transferabil intre diferite sisteme deoperare sau aplicatii). De asemenea este necesara transferarea output-ului programelor de calcul realizate camacro-uri in EXCEL in fisiere exterioare.Pentru citirea/scrierea datelor din/in fisiere exterioare trebuie efectuati urmatorii pasi:
1. Definirea numelui fisierului extern. Numele fisierului extern este o variabila de tip text . El trebuie sacontina intreaga cale (unitate de disc + director) pentru a ajunge la fisierul specificat. Spre exempludaca se doreste apelarea fisierului Exemplu5.txt numele care trebuie definit in aplicatie este:
C :\ Curs Manag & Dezv Rurala \Exemplu5 .txt
Caracterele subliniate sunt fixe in definirea variabilei care reprezinta numele fisierului. In acest modin cadrul aplicatiei numele fisierului poate fi construit utilizind operatia de incatenare a variabilelor de tip text:
UnitateDisc$ = C
Folder$ = Curs Manag & Dezv RuralaFisier$ = Exemplu5Extensie$ = txt
NumeFisier$ = UnitateDisc$ + :\ + Folder$ + \ + Fisier$ + . + Extensie$
22
-
8/6/2019 Proiectare Asistata Pe Calculator
23/44
Variabilele de tip text UnitateDisc$, Folder$, Fisier$, Extensie$ pot fi citite dintr-un sheet component al aplicatiei:
With Sheets(Fisiere)UnitateDisc$ = .Cells(1,2).Value
Folder$ = .Cells(2,2).ValueFisier$ = .Cells(3,2).ValueExtensie$ = .Cells(4,2).Value
End With
Acest mod de definire a variabilei pentru numele de fisier elimina orice ambiguitati prin includereain cadrul programului a caracterelor speciale fixe (:\, \, .)
2. Atribuirea unui numar de identificare in cadrul programului pentru fisierul care urmeaza a fi deschis.Pentru evitarea erorilor care pot sa apara prin deschiderea sub acelasi numar a mai multor fisierediferite se recomanda ca atribuirea unui numar pentru fisier sa fie facuta automat de program prinutilizarea instructiunii FreeFile:
Fn1 = FreeFile
In urma efectuarii acestei instructiuni variabila numerica Fn1 va lua valoarea 1 daca nu mai estedeschis nici un fisier, 2 daca deja este deschis un fisier, etc.
23
-
8/6/2019 Proiectare Asistata Pe Calculator
24/44
3. Deschiderea fisierului pentru operatii de citire se face utilizind instructiunea:
Open NumeFisier$ For Input Access Read As #Fn1
Caracterele subliniate sunt fixe pentru instructiune. NumeFisier$ si Fn1 se definesc in cadrulaplicatiei. In cazul in care se doreste deschiderea fisierului pentru scriere a datelor instructiunea areforma:
Open NumeFisier$ For Output Access Write As #Fn1
4. Citirea datelor dintr-un fisier se poate face in mai multe moduri:
a. Secvential (linie dupa linie de la inceputul fisierului) utilizind instructiunea Line Input. Acestmod permite cel mai sigur control asupra informatiei citite:
Line Input #Fn1, Variabila$
unde Fn1 este variabila numerica care contorizeaza numarul fisierului (conform pasului 2),iar Variabila$ este o variabila de tip text care va contine informatia cuprinsa in linia citita dinfisierul extern. Ulterior in program, variabila de tip text citita din fisier (Variabila$) poate fianalizata in termeni ai variabilelor componente separate prin caractere specificate ( vezioperatii cu variabile de tip text )
Astfel, pentru fisierul
cele doua linii sunt citite prin secventa de instructiuni:
Line Input #Fn1, X1$Line Input #Fn2, X2$
In urma acestei secvente de citire variabilele de tip text X1$ si X2$ vor avea continutul:
X1$ = Sandu Ion , 12344657679 , BucurestiX2$ = Mihai Gheorghe , 1426485696, Ploiesti
In cazul in care nu se cunosc numarul de linii care sunt in fisierul extern se poate utiliza osecventa de instructiuni utilizind un ciclu bazat pe secventa DO / LOOP :
i1 = 0Do While Not EOF(Fn1)
i1 = i1 + 1
Line Input #Fn1, Tx(i1)Loop
24
-
8/6/2019 Proiectare Asistata Pe Calculator
25/44
In aceasta secventa Fn1 este numarul corespunzator fisierului din care se face citirea (Pasul2), i1 este un numar intreg care contorizeaza liniile citite, iar Tx(i1) este o variabila vectoriala in care se stocheaza informatiile din fiecare linie a fisierului. EOF(Fn1) este o functie alimbajului VBA care semnaleaza atingerea sfirsitului fisierului desemnat prin variabilanumerica Fn1.
In limbaj natural secventa de instructiuni de mai sus se poate exprima sub forma :Executa ( DO ) atit timp ( WHILE ) cit nu s-a ajuns la sfirsitul fisierului al carui numar este
Fn [Not EOF(Fn) ] citirea linie cu linie ( LINE INPUT ) si atribuie continutul citit uneivariabile vectoriale de tip text Tx indexata dupa numarul liniei (i1)
Separarea variabilelor text citite prin instructiunea Line Input in variabile text formate dinsiruri de caractere separate prin caractere definite de utilizator (spre exemplu ,) se faceutilizind operatiile de manipulare a variabilelor text .
b. Secvential (variabila dupa variabila de la inceputul fisierului) utilizind instructiunea Input. Ingeneral acest tip de citire se face cind variabilele din fisierul extern sunt numere separate intreele prin , sau plasate, unul dupa altul in linii diferite:
Input #Fn1, A1, A2, A3
Spre exemplu, in cazul unui fisier in care sunt stocate date meteorologice zilnice conformunei structuri in care fiecare linie a fisierului extern este de tipul:An, Luna, Zi, Temperatura Medie, Temparatura maxima, Temperatura minima, Precipitatii,Evapotranspiratie, Umiditate Aer, Durata de stralucire a soarelui
citirea si atribuirea datelor variabilelor din cadrul programului se poate face prin secventa:
For i_An = 1 To NrAni
25
-
8/6/2019 Proiectare Asistata Pe Calculator
26/44
For i_Luna = 1 to 12For i_Zi = 1 to 365
Input #Fn1, An(i_An), Luna, Zi, Tav(i_An, i_Luna, i_Zi),Tmax(i_An, i_Luna, i_Zi), Tmin(i_An, i_Luna, i_Zi),Prec(i_An, i_Luna, i_Zi), Evap(i_An, i_Luna, i_Zi),Umid(i_An, i_Luna, i_Zi), DSS(i_An, i_Luna, i_Zi),
Next i_Zi Next i_Luna
Next i_An
In aceasta secventa se utilizeaza variabile matriciale pentru stocarea datelor climaticedepinzind de trei indici: an, luna, zi
5. Scrierea datelor intr-un fisier extern se face prin utilizarea instructiunilor Write si Print.Instructiunea WRITE are sintaxa:
Write #Fn1, Lista variabile separate prin ,
Variabilele cuprinse in lista sunt scrise pe aceeasi linie in fisierul extern. O noua apelare ainstructiunii Write va scrie variabilele pe rindul urmator.
Spre exemplu daca dorim sa scriem variabileleX1 = Sandu Ion"X2 = "12344657679"X3 = "Bucuresti"
pe un singur rind din fisierul exterior desemnat prin numarul Fn1 (vezi pasul 2) instructiunea va aveaforma:
Write #Fn1, X1, X2, X3
In fisierul exterior rindul corespunzator va avea forma:
"Sandu Ion","12344657679","Bucuresti"
Instructiunea PRINT permite un control mai mare asupra modului de scriere prin posibilitateaintroducerii in fisierul exterior a unor separatori intre variabile specificati de utilizator.Structura generala a instructiunii este:
Print #Fn1, Lista de variabile separate prin , sau ;
Separarea prin virgula (,) introduce automat separatori de tip blanc intre valorile scrise in fisierulextern. Separarea prin punct si virgula (;) scrie valorile in continuare fara separatori. Daca lista devariabile dintr-o instructiune Print se termina cu ; atunci urmatoarea apelare a instrctiunii print vascrie lista de variabile aferenta ei in continuarea liniei precedente.
Astfel daca instructiunea se scrie, pentru exemplul de mai sus, sub forma:
Print #Fn1, X1, X2, X3
linia scrisa in fisierul extern va avea forma:
Sandu Ion 12344657679 Bucuresti
26
-
8/6/2019 Proiectare Asistata Pe Calculator
27/44
Se remarca faptul ca variabilele text nu mai sunt scrise intre ghilimele. Separatorii dintre variabilesunt in acest blancurile.
Daca in instructiunea Print separatorii dintre variabile sunt ;
Print #Fn1, X1;X2; X3
atunci linia scrisa in fisierul extern va fi:
Sandu Ion12344657679Bucuresti
Acelasi rezultat se poate obtine si prin utilizarea secventei:
Print #Fn1, X1;Print #Fn1, X2;Print #Fn1, X3
Introducerea de separatori specifici utilizatorului intre valorile scrise pe aceeasi linie in fisierul extern
se poate face in unul din modurile urmatoare:Print #Fn1, X1, !, X2, !, X3
caz in care linia scrisa va fi:
Sandu Ion ! 12344657679 ! Bucuresti
Sau
Print #Fn1, X1; !; X2; !; X3
Caz in care linia scrisa va fi
Sandu Ion!12344657679!Bucuresti
6. Dupa incheierea instructiunilor de citire sau scriere, se recomanda inchiderea fisierului. Inchidereafisierului se face utilizind instructiunea Close:
Close #Fn1
Daca se utilizeaza instructiunea fara specificarea numarului fisierului (Fn1) care se inchide:
Close
Atunci sunt inchise toate fisierele deschise in cadrul aplicatiei.
Operatii cu variabile de tip textOperatiile care pot fi efectuate cu variabile de tip text sunt:
1. Coincatenarea care este echivalentul adunarii din operatiile cu variabile numericeAstfel daca avem doua variabile de tip textA1$ = Operatii cu A2$ = variabile de tip text
27
-
8/6/2019 Proiectare Asistata Pe Calculator
28/44
Prin coincatenare realizata cu operatorul +:
A$ = A1$ + A2$
se obtine variabila de tip text:
A$ = Operatii cu variabile de tip text2. Eliminarea blancurilor de la inceputul sau sfirsitul unei variabile text:
A$ = Trim (VariabilaText)
Spre exemplu daca avem variabila:
B$ = Sandu Ion
Aplicarea instructiunii:
A$ = Trim(B$)Va avea ca rezultat variabila text:
A$ = Sandu Ion
3. Evaluarea numarului de caractere ale unei variabile text. Instructiunea utilizata in acest scop este:
X = Len( Expresie )
unde X este numele unei variabile numerice egala cu lungimea numarului de caractere continute in
variabila de tip text rezultata in urma evaluarii Expresiei.
Astfel daca:
A1$ = Operatii cu
atunci:
X1 = Len(A1$)
va avea valoarea 12.
Daca:
A1$ = Operatii cu A2$ = variabile de tip text
atunci:
X = Len(A1$+A2$)
va evalua numarul de caractere al variabilei text Operatii cu variabile de tip text deci va aveavaloarea X=33.Din aceste exemple rezulta ca in calculul numarului de caractere este inclus si spatiul .
28
-
8/6/2019 Proiectare Asistata Pe Calculator
29/44
4. Evaluarea pozitiei la care apare pentru prima data un caracter sau sir de caractere specificat deutilizator. Forma generala a instructiunii care realizeaza aceasta evaluare este:
t = InStr (Start , VariabilaText , Caracter )
unde Start este o variabila numerica reprezentind prima pozitie de unde incepe cautarea (spreexemplu daca se doreste cautarea de la inceputul variabilei text atunci Start =1, daca se dorestecautarea incepind cu pozitia a 10 a atunci Start =10), VariabilaText este variabila de tip text in care seface cautarea, iar Caracter caracterul sau sirul de caractere care se cauta (spre exemplu ,, , ).In urma evaluarii instructiunii InStr se atribuie variabilei numerice t un numar reprezentind pozitia lacare apare prima data caracterul (sirul de caractere) specificat de Caracter incepind cu pozitiaStart in variabila text VariabilaText .
Exemple:Sa presupunem ca in variabila textA$ = SANDU ION,123445767,IASI
Dorim sa aflam pozitia in care se afla caracterul ,
Variabila text poate fi reprezentata sub forma:
S A N D U I O N , 1 2 3 4 4 6 5 7 6 7 , I A S I1 2 3 4 5 6 7 8 9 1
011
12
13
14
15
16
17
18
19
20
22
23
24
25
26
unde primul rind reprezinta sirul de caractere al variabilei, iar rindul al doilea pozitia fiecarui caracter in variabila.
Pozitia (t) la care apare prima data caracterul , este data prin evaluarea expresiei din dreaptasemnului egal:
t = InStr(1, A$, ,)
A doua aparitie (t1) a caracterului , este data de evaluarea expresiei:
t1 = InStr(t+1, A$, ,)
In aceasta expresie cautarea incepe de la primul caracter dupa aparitia anterioara a caracterului dorit(,), adica t+1.
5. Extragerea unui sir de caractere consecutive dintr-o variabila text:
A1$ = Mid (A$, PozitieStart , LungimeExtragere )
unde: PozitieStart este o variabila numerica (sau numar) a carei valoare reprezinta pozitia de la careincepe extragerea sirului de caractere, LungimeExtragere este o variabila numerica (sau numar) egalacu numarul de caractere care sunt extrase din variabila text A$.Ca exemplu sa segmentam variabila :
A$ = SANDU ION,123445767,IASI
in trei variabile text care sa contina caracterele separate prin virgula. Pasii care trebuiesc efectuati inacest sens sunt: Calculul pozitiei la care apare prima data caracterul separator considerat (,):
29
-
8/6/2019 Proiectare Asistata Pe Calculator
30/44
t = InStr(1, A$, ,)
Extragerea sirului de la inceputul variabilei A$ si pina la prima aparitie a caracterului deseparatie ,:
A1$ = Mid(A$, 1, t-1)
unde 1 este pozitia in variabila A$ de la care incepe cautarea (inceputul variabilei), iar t-1 estelungimea sirului de caractere care este extras. Variabila text A1$ va avea valoareaSANDUION
Calculul pozitiei celei de a doua aparitii a caracterului de separatie ,:
t1 = InStr(t+1, A$, ,)
Extragerea sirului de caractere cuprins intre cele doua caractere de separare:
A2$ = Mid(A$, t+1, t1-t-1)
unde t+1 reprezinta pozitia primului caracter de la dreapta primei virgule(,) incepind cu carese face extragerea, iar t1-t-1 reprezinta lungimea sirului de caractere care este extras.Variabila text A2$ va avea valoarea 123445767
Extragerea sirului de caractere dupa a doua apariti a virgulei si pina la capatul variabilei textA$:
A3$ = Mid(A$, t1+1)
In cazul in care extragerea se face pina la capatul variabilei nu mai este necesara specificarealungimii sirului de caractere. Variabila A3$ va primi valoarea IASI
6. Transformarea unei variabile text in numar:
X = Val (VariabilaText )
Astfel daca
A2$ = 123445767
Atunci:
X = Val(A2$)
va avea ca valoare numerica X = 123445767
7. Transformarea unei variabile numerice in variabila text:
A$ = Str (VariabilaNumerica )
Astfel, daca:
X = 123.457atunci:
30
-
8/6/2019 Proiectare Asistata Pe Calculator
31/44
A$ = Str(X)
va avea valoarea A$ = 123.457
Operatiile cu variabile text prezentate sunt deosebit de utile in citirea si/sau scrierea variabilelor din/infisiere externe .
Instructiunea FOR / NEXTIn cazul in care se doreste repetarea unui ciclu de operatii care depind de un indice exprimabil printr-unnumar intreg poate fi utilizata secventa de instructiuni FOR / NEXT a carei sintaxa este:
FOR Indice = StartValue TO StopValue STEP PasIndice {Bloc de Instructiuni}NEXT Indice
In aceasta secventa de instructiuni Indice , StartValue , StopValue si PasIndice sunt numere intregi (sauvariabile care iau valori numere intregi). Ciclul FOR / NEXT poate fi executat in ordinea crescatoare aindicelui (in acest caz StartValue < StopValue si PasIndice >0) sau in ordine descrecatoare
(StartValue>StopValue si PasIndice < 0).
Tradusa in limbaj comun secventa de instructiuni precedenta poate fi exprimata sub forma:
Pentru ( FOR ) valori ale Indice lui incepind cu StartValue pina la StopValue executa pe rind Blocul deinstructiuni. Indice le variaza la fiecare repetare a executiei blocului cu valoarea PasIndice .
In executarea secventei de instructiuni, programul atribuie parametrului Indice valoarea StartValue . Seexecuta Blocul de Instructiuni, dupa care valoare parametrului Indice este crescuta cu PasIndice . Daca nouavaloare este mai mare decit StopValue atunci se iese din ciclu. Daca nu ciclul se reia cu noua valoare pentru
Indice , s.a.m.d. pina la iesirea din ciclu.
Ex:
Pentru executarea {Bloc Instructiuni} pentru valorile I=1, 3, 5, 7, 9 se poate utiliza ciclul:
FOR I = 1 to 9 STEP 2{Bloc Instructiuni}
NEXT I
Pentru executarea {Bloc Instructiuni} pentru valorile I=10, 8, 6, 4, 2, 0 instructiunile sunt:
FOR I = 10 TO 0 STEP -1{Bloc Instructiuni}
NEXT I
Daca PasIndice este 1 valoarea poate sa nu mai fie scrisa in instructiune:
FOR Indice = StartValue TO StopValue {Bloc de Instructiuni}NEXT Indice
In continuare vom exemplifica secventa de instructiuni FOR / NEXT prin evaluarea mediei a n valori stocatein vectorul X(i), I=1,n:
31
-
8/6/2019 Proiectare Asistata Pe Calculator
32/44
Suma = 0For I = 1 TO n
Suma = Suma + X(i)Next IMedie = Suma / n
Executia programului se face conform urmatoarei secvente0. Suma = 01. I = 12. Suma = 0 + X(1)3. I = 24. Suma = [0 + X(1)] + X(2)5. I = 36. Suma = [0 + X(1) + X(2)] + X(3)
I = nSuma = [0 + X(1) + X(2) + + X(n-1)] + X(n)I = n + 1
I > n, deci se incheie ciclul
INSTRUCTIUNEA WHILE / WENDSecventa de instructiuni While / Wend, avind sintaxa:
While Conditie{Bloc de Instructiuni}
Wend
unde Conditie este o expresie a carei evaluare conduce la o valoare logica de tip Adevarat sau Fals poatefi transpusa in limbaj normal sub forma:
Atunci cind rezultatul evaluarii expresiei inclusa in Conditie este adevarat atunci executa Blocul deinstructiuni. Daca rezultatul evaluarii expresiei inclusa in Conditie este fals se iese din ciclu
In continuare vom exemplifica secventa de instructiuni WHILE / WEND prin evaluarea mediei a n valoristocate in vectorul X(i), I=1,n:
Suma = 0I = 0While I < n
I = I + 1Suma = Suma + X(I)
WendMedie = Suma / n
Un exemplu de utilizare a instructiunii While / Wend este dat in capitolul referitor la citirea datelor dintr-unsheet ( Exemplu 4 ).
INSTRUCTIUNEA DO / LOOPSecventa de instructiuni DO / LOOP avind una din sintaxele urmatoare:
DO WHILE Conditie
32
-
8/6/2019 Proiectare Asistata Pe Calculator
33/44
{Bloc de Instructiuni}LOOP
Sau
DO UNTIL Conditie{Bloc de Instructiuni}
LOOP
Executa {Bloc de Instructiuni} atita timp cit (WHILE) sau pina cind (UNTIL) expresia din Conditie esteAdevarata
Drept exemplu de utilizare a acestei instructiuniWith Sheets("Input")
i1 = 1Do While .Cells(i1, 1) ""
X(i1) = .Cells(i1, 1).Valuei1 = i1 + 1
Loopn = i1 - 1
End With
INSTRUCTIUNEA IF / END IF
BUTOANE
In sheet-rile aplicatiilor de tip workbook pot fi inserate butoane carora le pot fi asociate macro-functiirealizate in VBA.Pentru crearea unui buton intr-un sheet trebuie parcursi urmatorii pasi:
Activarea printr-un click al mouse-ului a optiunii Forms din meniul Toolbars activat dinmeniul principal View
33
-
8/6/2019 Proiectare Asistata Pe Calculator
34/44
In urma activarii optiunii Forms pe ecran apare caseta cuprinzind toate formele care se potinsera in sheet.
Cursorul mouse-ului se plaseaza pe forma corespunzatoare butoanelor.
34
-
8/6/2019 Proiectare Asistata Pe Calculator
35/44
Prin apasarea butonului mouse-ului pe forma corespunzatoare butoanelor cursorul mouse-uluiisi modifica forma permitind desenarea prin procedeul drag & drop a butonului. Se deschidede asemenea o fereastra care are lista macro-urilor realizate in VBA in cadrul aplicatiei. Se
poate selecta macro-ul a carei pornire se doreste asociata cu activarea butonului realizat(selectarea numelui din lista urmata de ok) aceasta operatie se poate face si ulterior (caz incare caseta se inchide prin tastarea butonului Cancel)
Prin click mouse dreapta pe butonul realizat se poate deschide un meniu de editare al butonului. Optiunea Edit Text permite editarea textului scris in caseta butonului. OptiuneaFormat Control permite modificarea fontului textului butonului, a dimensiunilor butonuluisau a centrarii textului (orizontl si vertical).
35
-
8/6/2019 Proiectare Asistata Pe Calculator
36/44
Macro-functiile care pot fi atasate butoanelor pot sa fie oricare din programele realizate in editorul VBA. Inacest mod aplicatiile realizate devin usor de manipulat de catre utilizatori.
INREGISTRAREA AUTOMATA A MACRO-FUNCTIILORPosibilitatea inregistrarii automate sub forma unui macro VBA a operatiilor pe care utilizatorul le executa incadrul unui workbook este deosebit de utila pentru dezvoltarea unor aplicatii complexe.
In vederea initierii procedurii de inregistrare automata a operatiilor care sunt efectuate in cadrul unuiworkbook se apeleaza optiunea Record New Macro din meniul Tools :
In urma apelarii acestei optiuni pe ecran apare o fereastra pentru editarea numelui sub care se va inregistraMacro-functia, precum si optional combinatia de taste destinata apelarii rapidea Macro-ului (short-cut):
36
-
8/6/2019 Proiectare Asistata Pe Calculator
37/44
Dupa iesire din acest editor (prin tastarea butonului OK) pe ecran apare fereastracare arata faptul ca inregistrarea instructiunilor care sunt efectuate in Sheet este activa.In momentul in care se doreste stoparea inregistrarii instructiunilor se apasa (click
mouse) butonul Stop din aceasta fereasta de inregistrare.
Citeva exemple vor arata utilitatea acestei optiuni pentru realizarea unor aplicatiicomplexe.
Sa presupunem ca se inregistreaza succesiunea de instructiuni pentru deschiderea unuiworkbook si copierea unor date din sheet-urile acestuia intr-un sheet din aplicatia curenta. Se
prezinta in continuare operatiile efectuate in cadrul sheet-ului si imaginea lor in instructiuniVBA scrise automat de acest utilitar.
Deschiderea fisierului Griu.xls prin utilizarea instructiunii Open:
este inregistrata automat in editorul Visual Basic sub forma:
37
-
8/6/2019 Proiectare Asistata Pe Calculator
38/44
Selectarea coloanelor A:G efectuata in workbook-ul deschis este transcrisa automat in editorul VBA subforma:
Copierea coloanelor selectate ( Edit/Copy ) se traduce automat in editorul VBA:
38
-
8/6/2019 Proiectare Asistata Pe Calculator
39/44
Reintoarcerea la workbok-ul initial (Book1) si lipirea continutului coloanelor copiate ( Edit/Paste )
39
-
8/6/2019 Proiectare Asistata Pe Calculator
40/44
Revenirea la workbook-ul Griu.xls si inchiderea acestuia ( File/Close ) este transpusa de asemenea inmacrofunctia scrisa automat:
Oprirea editarii operatiilor care se efectueaza in continuare in workbook se face prin tastarea butonuluidin fereastra deschisa la initierea procedurii de inregistrare automata a unui macro.
40
-
8/6/2019 Proiectare Asistata Pe Calculator
41/44
Codul rezultat poate fi vizualizat dupa cum am vazut, in editorul VBA. Acest cod este bineinteles particularizat pentru seria de operatii efectuate pe parcursul inregistrarii:
Sub Macro1()Workbooks.Open Filename:="C:\My Documents\Griu.xls"Windows("Griu.xls").ActivateColumns("A:G").SelectSelection.CopyApplication.CutCopyMode = FalseWindows("Book1").ActivateRange("A1").SelectApplication.CutCopyMode = FalseActiveSheet.PasteWindows("Griu.xls").ActivateActiveWorkbook.CloseWindows("Book1").Activate
End Sub
Pornind de la acest cod se poate obtine o aplicatie generalizata care sa poata fi utilizata si in alte configuratiide fisiere, sheet-uri sau coloane care se copiaza. Textul scris cu rosu din programul urmator arata locul incare au fost modificate instructiunile originale inregistrate automat, in scopul generalizarii programului:
Sub Macro1()NumeFisier = "C:\My Documents\Griu.xls"NumeWorkbook = "Griu.xls"DomeniuCopiat = A:GDomeniuPaste=A1Workbooks.Open Filename:= NumeFisier Windows( NumeWorkbook ).Activate
Columns( DomeniuCopiat ).SelectSelection.CopyApplication.CutCopyMode = FalseWindows("Book1").ActivateRange( DomeniuPaste ).SelectApplication.CutCopyMode = FalseActiveSheet.PasteWindows( NumeWorkbook ).ActivateActiveWorkbook.CloseWindows("Book1").Activate
End Sub
Se constata ca numele fisierului care se deschide si domeniile atribuiteinstructiunilor Copy si Paste pot fi incluse in variabile text definite deutilizator. Aceste variabile pot fi furnizate de utilizator dintr-un sheet, citirealor facindu-se utilizind procedurile descrise la capitolul privind citirea datelor din sheet-uri .Astfel, daca informatiile necesare sunt introduse prin sheet-ul Sheet2conform imaginii alaturate, atunci subrutina anterioara se poate modificaastfel
Sub Macro1()With Sheets(Sheet2)
UnitateDisc = .Cells(1,4).ValueDirector = .Cells(2,4).ValueWbook = .Cells(3,4).Value
41
-
8/6/2019 Proiectare Asistata Pe Calculator
42/44
StartColumn = .Cells(4,4).ValueEndColumn = .Cells(5,4).ValueDomeniuPaste = .Cells(6,4).Value
End WithNumeFisier=UnitateDisc+:\+Director+\+Wbook NumeWorkbook = Wbook DomeniuCopiat=StartColumn+:+EndColumnWorkbooks.Open Filename:= NumeFisier Windows( NumeWorkbook ).Activate
Columns( DomeniuCopiat ).SelectSelection.CopyApplication.CutCopyMode = FalseWindows("Book1").Activate
Range( DomeniuPaste ).SelectApplication.CutCopyMode = FalseActiveSheet.PasteWindows( NumeWorkbook ).Activate
ActiveWorkbook.CloseWindows("Book1").Activate
End Sub
unde textul scris cu albastru reprezinta instructiunile scrise pentru citirea variabilelor text utilizate in program.
Inregistrarea automata a operatiilor care se fac pentru reprezentarea grafica a datelor conducla o macro-functie deosebit de utila pentru aplicatii ulterioare. Spre exemplu sa presupunemca dorim sa reprezentam grafic doua siruri de valori (Y1 si Y2) in functie de variabilaindependenta X.
Dupa activarea optiunii pentru inregistrarea automata a unui macro, operatiile efectuate pentru reprezentareagrafica a sirurilor de date:
42
-
8/6/2019 Proiectare Asistata Pe Calculator
43/44
1. Click Chart 2. Selectati Chart type, then press Next
3. Selectati Series , apoi click Next 4. Click Add , apoi Next
5. Completati casetele pentru: 6. Procedati similar pct. 5 pentru a doua
X value , Y value si Name. variabilaPentru inserarea unei noi serii presati Add Click Next
43
-
8/6/2019 Proiectare Asistata Pe Calculator
44/44
7. Completati casetele privind Titlul graficului, numele variabilei X si YClick Finish
Codul scris automat in editorul VBA corespunzator pasilor 1-7 executati de utilizator pentru reprezentareagrafica a datelor este urmatorul:
Sub Macro1()Charts.AddActiveChart.ChartType = xlXYScatter ActiveChart.SeriesCollection.NewSeriesActiveChart.SeriesCollection.NewSeriesActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C1:R16C1"ActiveChart.SeriesCollection(1).Values = "=Sheet1!R2C2:R16C2"ActiveChart.SeriesCollection(1).Name = "=""Y1"""ActiveChart.SeriesCollection(2).XValues = "=Sheet1!R2C1:R16C1"ActiveChart.SeriesCollection(2).Values = "=Sheet1!R2C3:R16C3"ActiveChart.SeriesCollection(2).Name = "=""Y2"""ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Exemplu"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Y"End With
End Sub