Transcript
  • 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


Top Related