Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


instructiuni Visual Basic

baze de date



+ Font mai mare | - Font mai mic



INSTRUCTIUNILE VBA

Generalitati

Exista trei categorii de instructiuni Visual Basic:



instructiuni de declarare (prezentate la declararea variabilelor) prin care se denumesc si se declara tipul pentru variabile, constante si proceduri;

  • instructiuni de atribuire (prezentate in continuare) prin care se atribuie valori variabilelor sau constantelor;
  • instructiuni executabile (prezentate in continuare) care initiaza actiuni: executa metode sau proceduri, controleaza fluxul executiei codului.

În mediul de dezvoltare VBA, sintaxa instructiunilor este verificata automat dupa ce se trece la instructiunea urmatoare (prin Enter).

Continuarea instructiunilor

O instructiune poate sa fie scrisa pe mai multe linii prin utilizarea caracterului de continuare a liniei '_' precedat de un spatiu. De exemplu, crearea prin program a unui tabel intr-un document Word:

ActiveDocument.Tables.Add Range:=Selection.Range, _

NumRows:=3, _

NumColumns:= 3

unde, pe langa continuarea liniilor se va remarca utilizarea argumentelor numite la apelul metodei de adaugare a unui nou tabel la colectia de tabele a documentului.

Doua instructiuni pot fi scrise pe o aceeasi linie daca sunt separate cu caracterul ':'.

Etichetarea liniilor

O linie poate fi identificata:

printr-o eticheta: orice nume, care respecta regulile generale, care incepe in prima coloana a liniei si se termina cu caracterul ':'

  • printr-un numar: orice combinatie de cifre, care incepe in prima coloana a liniei si este unic in modulul respectiv.

Identificatorii de linii pot fi utilizati in instructiuni de control, desi codul astfel construit nu respecta regulile programarii structurate..

Comentarii

Textele explicative (necesare documentarii codului) pot fi introduse pe linii separate sau in continuarea liniei de cod.

O linie de comentariu incepe cu un apostrof (') sau cu cuvantul Rem urmat de un spatiu.

Comentariul de pe aceeasi linie cu o instructiune se introduce printr-un apostrof urmat de comentariu.

Operatori

În formarea expresiilor de diverse tipuri, operatorii sunt cei utilizati aproape general in limbajele de programare de nivel inalt. Pentru fixarea termenilor si notatiilor sunt totusi prezentati, pe categorii, insotiti, acolo unde este cazul de scurte explicatii.

Operatori aritmetici

Operator

Semnificatie

Observatii

Ridicarea la putere

rezultatul este Double sau Variant(Double) cu exceptia: daca un operand este Null, rezultatul este tot Null

Înmultirea

rezultatul este dat de cel 'mai precis' factor, ordinea crescatoare a 'preciziei' fiind, pentru inmultire, Byte, Integer, Long, Single, Currency, Double si Decimal. Daca o expresie este Null, rezultatul este Null. O expresie Empty este considerata ca 0. Pentru exceptii se va studia Help - *(operator).

Împartirea

rezultatul este, in general, Double sau Variant(Double). Daca o expresie este Null, rezultatul este Null. O expresie Empty este considerata ca 0. Pentru exceptii se va studia Help - /(operator).

Împartirea intreaga

inainte de impartire, operanzii sunt rotunjiti la Byte, Integer sau Long. Rezultatul este Byte, Variant(Byte), Integer, Variant (Integer), Long, sau Variant(Long). Daca o expresie este Null, rezultatul este Null. O expresie Empty este considerata ca 0.

Mod

Restul impartirii

operanzii sunt rotunjiti la intregi si se obtine restul impartirii. Rezultatul este Byte, Variant(Byte), Integer, Variant (Integer), Long, sau Variant(Long). Daca o expresie este Null, rezultatul este Null. O expresie Empty este considerata ca 0.

Adunarea numerica sau concatenarea sirurilor

in general, operanzi numerici produc adunarea, iar operanzi siruri produc concatenarea. În cazul numeric, rezultatul este de tipul cel 'mai precis' al operanzilor, ordinea de 'precizie' fiind pentru adunare si scadere: Byte, Integer, Long, Single, Double, Currency si Decimal. Deoarece operanzii pot fi orice expresie, pentru o informare completa (de exemplu operanzi Variant) se va studia Help - +(operator).

Scaderea sau inversarea semnului

operanzii pot fi doar numerici. Rezultatul este de tipul cel 'mai precis' al operanzilor, ordinea de 'precizie' fiind pentru adunare si scadere: Byte, Integer, Long, Single, Double, Currency si Decimal. Daca o expresie este Null, rezultatul este Null. O expresie Empty este considerata ca 0. Pentru exceptii se va studia Help - -(operator).

Operatori de comparare

Relatiile care exista intre diferite tipuri de entitati se pot evidentia prin comparatii avand una dintre formele urmatoare:

result = expression1 comparisonoperator expression2

result = object1 Is object2

result = string Like pattern

unde

result este o variabila numerica

expression este o expresie oarecare

comparisonoperator este un operator relational

object este un nume de obiect

string este o expresie sir oarecare

pattern este o expresie String sau un domeniu de caractere.

Operatorii de comparare sunt cei uzuali: < (mai mic), <= (mai mic sau egal), > (mai mare), >= (mai mare sau egal), = (egal), <> (diferit, neegal).

Rezultatul este True (daca este adevarata relatia), False (daca relatia este neadevarata), Null (daca cel putin un operand este Null).

Operatorul Is produce True daca variabilele se refera la acelasi obiect si False in caz contrar.

Operatorul Like compara doua siruri cu observatia ca al doilea tremen este un sablon. Prin urmare rezultatul este True daca primul sir operand este format dupa sablon, False in caz contrar. Atunci cand un operand este Null, rezultatul este tot Null.

Comportarea operatorului Like depinde de instructiunea Option Compare, care poate fi:

Option Compare Binary, ordinea este cea a reprezentarii interne binare, determinata in Windows de codul de pagina.

  • Option Compare Text, compararea este insenzitiva la capitalizarea textului, ordinea este determinata de setarile locale ale sistemului.

Constructia sablonului poate cuprinde caractere wildcard, liste de caractere, domenii de caractere:

? un caracter oarecare

* oricate caractere (chiar nici unul)

# o cifra oarecare (0-9).

[charlist] oricare dintre caracterele enumerate in lista, un domeniu de litere poate fi dat prin utilizarea cratimei.

[!charlist] orice caracter care nu este in lista

Observatie. Pentru a utiliza in sablon caracterele speciale cu valoare de wildcard se vor utiliza constructii de tip lista: [[], [?] etc. Paranteza dreapta va fi indicata singura: ].

Pentru alte observatii utile se va studia Help - Like operator.

Operatori de concatenare

Pentru combinarea sirurilor de caractere se pot utiliza operatorii & si +.

În sintaxa

expression1 & expression2

unde operanzii sunt expresii oarecare, rezultatul este

de tip String, daca ambii operanzi sunt String

  • de tip Variant(String) in celelalte cazuri
  • Null, daca ambii operanzi sunt Null.

Înainte de concatenare, operanzii care nu sunt siruri se convertesc la Variant(String). Expresiile Null sau Empty sunt tratate ca siruri de lungime zero ('').

Operatori logici

Pentru operatiile logice sunt utilizati urmatorii operatori, uzuali in programare.

Operator

Semnificatie

Observatii

And

conjunctia logica

Null cu False da False, Null cu True sau cu Null da Null. Operatorul And realizeaza si operatia de conjunctie bit cu bit pentru expresii numerice.

Eqv

echivalenta logica

Daca o expresie este Null, rezultatul este Null. Eqv realizeaza si compararea bit cu bit a doua expresii numerice, pozitionand cifrele binare ale rezultatului dupa regulile de calcul ale echivalentei logice: 0 Eqv 0 este 1 etc.

Imp

implicatia logica

True Imp Null este Null, False Imp * este True, Null Imp True este True, Null Imp False (sau Null) este Null. Operatorul Imp realizeaza si compararea bit cu bit a doua expresii numerice, pozitionand cifrele binare ale rezultatului dupa regulile de calcul ale implicatiei logice: 1 Imp 0 este 0, in rest rezultatul este 1.

Not

negatia logica

Not Null este Null. Prin operatorul Not se poate inversa bit cu bit valorile unei variabile, pozitionandu-se corespunzator un rezultat numeric.

Or

disjunctia logica

Null Or True este True, Null cu False (sau Null) este Null. Operatorul Or realizeaza si o comparatie bit cu bit a doua expresii numerice pozitionand bitii corespunzatori ai rezultatului dupa regulile lui Or logic.

Xor

disjunctia exclusiva

Daca un operand este Null, atunci rezultatul este Null. Se poate efectua operatia de sau exclusiv si bit cu bit pentru doua expresii numerice [b1+b2(mod 2)].

Instructiuni de atribuire

Atribuirea se poate efectua prin instructiunea Let (pentru valori atribuite variabilelor si proprietatilor), Set (pentru atribuirea de obiecte la o variabila de tip obiect), Lset si Rset (pentru atribuiri speciale de siruri sau tipuri definite de utilizator).

Instructiunea Let

Atribuie valoarea unei expresii la o variabila sau proprietate.

[Let] varname = expression

unde varname este nume de variabila sau de proprietate.

Este de remarcat forma posibila (si de fapt general utilizata) fara cuvantul Let.

Observatii. Valoarea expresiei trebuie sa fie compatibila ca tip cu variabila (sau proprietatea): valori numerice nu pot fi atribuite variabilelor de tip String si nici reciproc.

Variabilele Variant pot primi valori numerice sau String, reciproc nu este valabil decat daca valoarea expresiei Variant poate fi interpretata compatibila cu tipul variabilei: orice Variant poate fi atribuit unei variabile de tip String (cu exceptia Null), doar Variant care poate fi interpretat nuric poate fi atribuit unei variabile de tip numeric.

La atribuirea valorilor numerice pot avea loc conversii la tipul numeric al variabilei.

Atribuirea valorilor de tip utilizator poate fi efectuata doar daca ambii termeni au acelasi tip definit. Pentru alte situatii se va utiliza instructiunea Lset.

Nu se poate utiliza Let (cu sau fara cuvantul Let) pentru legarea de obiecte la variabile obiect. Se va utiliza in aceasta situatie instructiunea Set.

Instructiunea LSet

Copie, cu aliniere la stanga, un sir de caractere (valoarea expresiei din dreapta) intr-o variabila de tip String. Deoarece copierea este binara, poate fi utilizata pentru atribuiri intre tipuri utilizator diferite (rezultatul este impredictibil deoarece nu se face nici o verificare de tipuri/componente ale valorilor de tip record). Sintaxa este

LSet stringvar = string

LSet varname1 = varname2

unde

stringvar, string reprezinta variabila de tip String si expresia de acelasi tip implicate intr-o atribuire de siruri.

varname1, varname2 sunt denumiri de variabile, de tipuri definite de utilizator (vezi instructiunea Type) diferite. Zona de memorie alocata celei de a doua variabile este copiata (aliniata la stanga) in zona de memorie a primei variabile.

Caracterele care raman neocupate se completeaza cu spatii, iar daca zona de unde se copie este mai mare, caracterele din dreapta se pierd (sunt trunchiate).

Instructiunea LSet

Copie, cu aliniere la dreapta, un sir de caractere (valoarea expresiei din dreapta) intr-o variabila de tip String. Sintaxa este

RSet stringvar = string

Caracterele ramase neocupate in variabila sunt completate ccu spatii. Instructiunea RSet nu se poate utiliza (analog lui LSet) pentru tipuri definite de utilizator.

Instructiuni executabile

Executia unui program are loc, in lipsa oricarui control, instructiune cu instructiune, de la stanga la dreapta si de sus in jos. Acest sens poate fi modificat, intr-o oarecare masura, prin ordinea de precedenta a operatiilor in evaluarea expresiilor. Este evident ca o asemenea structura simpla nu poate cuprinde toate aspectele programarii si din acest motiv necesitatea structurilor de control a fluxului executiei. Unele instructiuni au fost pastrate doar din motive de compatibilitate cu versiunile initiale ale limbajului, in locul lor fiind preferate structuri mai evoluate sau similare altor limbaje de programare.

Instructiuni de transfer (GoSub.Return, GoTo, OnError,
On.GoSub, On.GoTo)

Aceasta categorie cuprinde instructiunile prin care controlul executiei este transferat la o alta instructiune din procedura. În general, utilizarea acestor comenzi nu produce programe foarte structurate (in sensul programarii structurate) si prin urmare, pentru o mai mare claritate a codului, pot fi inlocuite cu alte structuri de programare.

GoSub.Return

În cadrul unei proceduri un grup de instructiuni poate fi organizat ca o subrutina (similar unei proceduri on-line, nenumite) identificata prin linia de inceput. Transferul controlului la acest grup de instructiuni si revenirea la locul apelului se poate efectua prin GoSub.Return cu sintaxa

GoSub line

line

Return

unde line este o eticheta de linie sau un numar de linie din aceeasi procedura.

Pot exista mai multe instructiuni Return, prima executata produce saltul la instructiunea care urmeaza celei mai recente instructiuni GoSub executate.

GoTo

Realizeaza tranferul controlului executiei la o linie din aceeasi procedura.

GoTo line

unde line este o eticheta de linie sau un numar de linie din aceeasi procedura.

On Error

Permite controlul erorilor prin transferul controlului la rutine de tratare.

Observatie. Este prezentata in sectiunea dedicata controlului erorilor.

On.GoSub, On.GoTo

Permit o ramificare multipla, dupa valoarea unei expresii. Se recomanda, pentru claritatea codului, utilizarea structurii Select Case in locul acestor structuri.

On expression GoSub destinationlist

On expression GoTo destinationlist

unde

expression este o expresie numerica avand valoare intreaga (dupa o eventuala rotunjire) intre 0 si 255 inclusiv.

destinationlist este o lista de etichete de linii sau numere de linii, separate prin virgule (elementele pot fi de ambele categorii), din aceeasi procedura cu instructiunea.

Daca valoarea expresiei este negativa sau mai mare decat 255 se produce o eroare.

Daca valoarea expresiei, fie ea k, este in domeniul rangurilor listei, atunci se transfera controlul la linia identificata de al k-lea element al listei.

Daca valoarea expresiei este 0 sau mai mare decat numarul de elemente din lista, transferul se efectueaza la linia care urmeaza instructiunea OnGoSub sau OnGoTo.

Instructiuni de terminare sau oprire a programului
(DoEvents, End, Exit, Stop)

Terminarea executiei programului sau oprirea temporara (pauza) se pot realiza prin instructiunile enumerate aici.

DoEvents

Desi nu este o instructiune VBA ci este o functie, includerea ei este naturala prin aceea ca permite cedarea controlului catre sistemul de operare, care poate astfel sa functioneze in regim de multitasking. Actiunea poate fi realizata si prin alte tehnici (de exemplu utilizarea unui Timer etc.). Sintaxa este

DoEvents( )

Functia returneaza, in general, valoarea 0.

Controlul este redat programului dupa ce sistemul de operare a terminat procesarea evenimentelor din coada de evenimente, ca si procesarea tuturor caracterelor din coada SendKeys.

Observatie. Pentru alte observatii se va studia documentatia comenzii DoEvents.

End

Termina executia unei proceduri (sub forma prezentata aici) sau indica sfarsitul codului unei structuri de tip bloc (cum ar fi End Function, End If etc., prezentate la structurile respective).

Sintaxa, in ipostaza opririi executiei, este:

End

Prin aceasta instructiune, care poate fi plasata oriunde in program, executia este terminata imediat, fara a se mai executa eventualele instructiuni scrise pentru tratarea unor evenimente specifice sfarsitului de program (Unload, Terminate etc.).

Fisierele deschise prin Open sunt inchise si toate variabilele sunt eliberate. Obiectele create din modulele clasa sunt distruse, iar referintele din alte aplicatii la asemenea obiecte sunt invalidate. Memoria este eliberata.

Exit

Prin instructiunea Exit, sub una din multiplele ei forme, se intrerupe o ramura de executie (cum ar fi o procedura, o structura iterativa etc.) pentru a se continua nivelul apelant. Sintaxa este

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

si efectele sunt prezentate la structurile respective. Nu trebuie confundata cu instructiunea End.

Stop

Efectul instructiunii este dependent de modul de executiei a programului. Daca se executa varianta compilata a programului (fisierul .exe) atunci instructiunea este similara instructiunii End (suspenda executia si inchide fisierele deschise). Daca executia este din mediul VBA, atunci se suspenda executia programului, dar nu se inchid fisierele deschise si nu se sterge valoarea variabilelor. Executia poate fi reluata din punctul de suspendare.

Stop

Instructiunea este similara introducerii unui punct de oprire (Breakpoint) in codul sursa.

Structuri iterative (DoLoop, ForNext, For EachNext,
WhileWend, With)

Prin intermediul constructiilor de tip bloc prezentate in aceasta sectiune se poate repeta, in mod controlat, un grup de instructiuni. În cazul unui numar nedefinit de repetitii, conditia de oprire poate fi testata la inceputul sau la sfarsitul unui ciclu, prin alegerea structurii adecvate.

Do.Loop

Se vor utiliza structuri Do.Loop pentru a executa un grup de instructiuni de un numar de ori nedefinit aprioric. Daca se cunoaste numarul de cicluri, se va utiliza structura For.Next.

Înainte de continuare se va testa o conditie (despre care se presupune ca poate fi modificata in instructiunile executate). Diferitele variante posibile pentru Do.Loop difera dupa momentul evaluarii conditiei si decizia luata.

Do [ condition]

statements]

[Exit Do]

statements]

Loop

sau

Do

statements]

[Exit Do]

statements]

Loop [ condition]

unde

condition este o expresie care valoare de adevar True sau False. O conditie care este Null se considera False.

statements sunt instructiounile care se repeta atata timp (while) sau pana cand (until) conditia devine True.

Daca decizia este de a nu continua ciclarea, atunci se va executa prima instructiune care urmeaza intregii structuri (deci de dupa linia care incepe cu Loop).

Se poate abandona ciclarea oriunde in corpul structurii prin utilizarea comenzii Exit Do (cu aceasta sintaxa). Daca apare o comanda Exit Do se poate omite chiar si conditia din enunt intrucat executia se va termina prin aceasta decizie.

Structurile Do pot fi inserate (dar complet) unele in altele. O terminare (prin orice metoda) a unei bucle transfera controlul la nivelul Do imediat superior.

Executia structurilor este explicata in tabelul urmator

Do While.Loop

Testeaza conditia la inceputul buclei, executa bucla numai daca rezultatul este True si continua astfel pana cand o noua evaluare produce False.

Do Until.Loop

Testeaza conditia la inceputul buclei, executa bucla numai daca rezultatul este False si continua astfel pana cand o noua evaluare produce True.

Do.Loop While

Se executa intotdeauna bucla o data, se testeaza conditia la sfarsitul buclei si se repeta bucla atat timp cat conditia este True. Oprirea este pe conditie falsa.

Do.Loop Until

Se executa intotdeauna bucla o data, se testeaza conditia la sfarsitul buclei si se repeta bucla atat timp cat conditia este False. Oprirea este pe conditie adevarata.

For.Next

Atunci cand se cunoaste numarul de repetari ale unui bloc de instructiuni, se va folosi structura For.Next. Structura utilizeaza o variabila contor, a carei valoare se modifica la fiecare ciclu, oprirea fiind atunci cand se atinge o valoare specificata. Sintaxa este:

For counter = start To end [Step step]

statements]

[Exit For]

statements]

Next [counter]

unde

counter este variabila contor (numara repetarile), de tip numeric. Nu poate fi de tip Boolean sau element de tablou.

start este valoarea initiala a contorului.

end este valoarea finala a contorului.

step este cantitatea care se aduna la contor la fiecare pas. În cazul in care nu se specifica este implicit 1. Poate fi si negativa.

statements sunt instructiunile care se repeta. Daca nu se specifica, atunci singura actiune este cea de modificare a contorului de un numar specificat de ori.

Actiunea este dictata de pasul de incrementare si relatia dintre valoarea initiala si cea finala.

Instructiunile din corpul structurii se executa daca

o        counter <= end pentru step >= 0 sau

    • counter >= end pentru step < 0.

Dupa ce toate instructiunile s-au executat, valoarea step este adaugata la valoarea contorului si instructiunile se executa din nou dupa acelasi test ca si prima data, sau bucla For.Next este terminata si se executa prima instructiune de dupa linia Next.

Specificarea numelui contorului in linia Next poate clarifica textul sursa, mai ales in cazul cand exista structuri For.Next imbricate.

Corpul unei bucle For.Next poate include (complet) o alta structura For.Next. În asemenea situatii, structurile imbricate trebuie sa aiba variabile contor diferite.

Instructiunile Exit For pot fi plasate oriunde in corpul unei bucle si provoaca abandonarea ciclarii. Controlul executiei se transfera la prima instructiune de dupa linia Next.

For Each.Next

Similara structurii For.Next, structura For Each.Next repeta un grup de instructiuni pentru fiecare element dintr-o colectie de obiecte sau dintr-un tablou (cu exceptia celor de un tip utilizator). Este utila atunci cand nu se cunoaste numarul de elemente sau daca se modifica, in timpul executiei, continutul colectiei.

Sintaxa este:

For Each element In group

statements]

[Exit For]

statements]

Next [element]

unde

element este variabila utilizata pentru parcurgerea elementelor. Daca se parcurge o colectie de obiecte, atunci element poate fi Variant, o variabila generica de tip Object, sau o variabila obiect specifica pentru biblioteca de obiecte referita. Pentru parcurgerea unui tablou, element poate fi doar o variabila de tip Variant.

group este numele colectiei de obiecte sau al tabloului.

statements este grupul de istructiuni executate pentru fiecare element.

Executia unei structuri For Each.Next este

  1. Se defineste element ca numind primul element din grup (daca nu exista nici un element, se transfera controlul la prima instructiune de dupa Next - se paraseste bucla fara executarea instructiunilor).
  2. Se executa instructiunile din corpul buclei For.
  3. Se testeaza daca element este ultimul element din grup. Daca raspunsul este afirmatif, se paraseste bucla.
  4. Se defineste element ca numind urmatorul element din grup.
  5. Se repeta pasii 2 pana la 4.

Instructiunile Exit For sunt explicate la For.Next.

Buclele ForEachNext pot fi imbricate cu conditia ca elementele utilizate la iterare sa fie diferite.

Observatie. Pentru stergerea tuturor obiectelor dintr-o colectie se va utiliza For.Next si nu For Each.Next. Se va utiliza ca numar de obiecte colectie.Count

While.Wend

Executa un grup de instructiuni atat timp cat este adevarata o conditie. Sintaxa

While condition

statements]

Wend

Este recomandat sa se utilizeze o structura Do.Loop in locul acestei structuri.

With

Programarea orientata pe obiecte produce, datorita calificarilor succesive, constructii foarte complexe atunci cand se numesc proprietatile unui obiect. În cazul modificarilor succesive ale mai multor proprietati ale aceluiasi obiect, repetarea zonei de calificare poate produce erori de scriere si conduce la un text greu de citit. Codul este simplificat prin utilizarea structurii With.End With. O asemenea structura executa o serie de instructiuni pentru un obiect sau pentru o variabila de tip utilizator. Sintaxa este:

With object

statements]

End With

unde

object este numele unui obiect sau a unui tip definit de utilizator

statements sunt instructiunile care se executa pentru entitatea precizata.

Permitand omiterea recalificarilor din referintele la obiectul precizat, orice constructie de tipul

'.nume' este interpretata in instructiunile structurii drept 'object.nume'.

Într-un bloc With nu se poate schimba obiectul procesat.

La plasarea unui bloc With in interiorul altui bloc With, obiectul extern este mascat complet, deci calificarile eventuale la acest obiect vor fi efectuate.

Nu se recomanda saltul in si dintr-un bloc With.

Structuri de decizie (If.Then.Else, Select Case)

Ramificarea firului executiei dupa rezultatul verificarii unei conditii este o necesitate frecventa in orice implementare.

Pe langa structurile prezentate, se pot utiliza trei functii care realizeaza alegeri in mod liniarizat (pe o linie de cod): Choose(), Iif(), Switch().

If.Then.Else

O asemenea structura, intalnita de altfel in toate limbajele de programare, executa un grup de instructiuni ca raspuns la indeplinirea unei conditii (compusa sau nu din mai multe conditii testate secvential). Sintaxa permite o mare varietate de forme:

If condition Then [statements] [Else elsestatements]

sau

If condition Then

statements]

[ElseIf condition-n Then

elseifstatements]

[Else

elsestatements]]

End If

unde

condition are una din formele: expresie numerica sau sir care se poate evalua True sau False (Null este interpretat False);
expresie de forma
TypeOf objectname Is objecttype, evaluata True daca objectname este de tipul obiect specificat in objecttype.

statements, elsestatements, elseifstatements sunt blocurile de instructiuni executate atunci cand conditiile corespunzatoare sunt True.

La utilizarea primei forme, fara clauza Else, este posibil sa se scrie mai multe instructiuni, separate de ':', pe aceeasi linie.

Verificarea conditiilor implica evaluarea tuturor subexpresiilor, chiar daca prin jocul operanzilor si operatorilor rezultatul poate fi precizat mai inainte (de exemplu OR cu primul operand True).

Select Case

Instructiunea Select Case se poate utiliza in locul unor instructiuni ElseIf multiple (dintr-o structura If.Then.ElseIf) atunci cand se compara aceeasi expresie cu mai multe valori, diferite intre ele. Instructiunea Select Case furnizeaza, prin urmare, un sistem de luare a deciziilor similar instructiunii If.Then.ElseIf. Totusi, Select Case produce un un cod mai eficient si mai inteligibil. Sintaxa este:

Select Case testexpression

[Case expressionlist-n

statements-n]]

[Case Else

elsestatements]]

End Select

unde

testexpression este o expresie numerica sau sir.

expressionlist-n este lista, separata prin virgule, a uneia sau mai multe expresii de forma:

expression

  • expression To expression. Cuvantul To introduce un interval de valori, valoarea minima fiind prima specificata.
  • Is comparisonoperator expression. Se va utiliza Is cu operatori de comparare (exceptand Is si Like) pentru a specifica un domeniu de valori.

statements-n reprezinta una sau mai multe instructiuni care se vor executa daca testexpression este egala cu un element din expressionlist-n

elsestatements reprezinta una sau mai multe instructiuni care se vor executa daca testexpression nu este egala cu nici un element din listele liniilor Case.

Daca testexpression se potriveste cu un element dintr-o lista Case, se vor executa instructiunile care urmeaza aceasta clauza Case pana la urmatoarea clauza Case, sau pana la End Select. Control executiei trece apoi la instructiunea care urmeaza liniei finale End Select. Rezulta ca daca testexpression se regaseste in mai multe liste, doar prima potrivire este considerata.

Clauza Case Else are semnificatia uzuala 'altfel, in rest, in caz contrar etc.', adica introduce instructiunile care se executa atunci cand expresia de test nu se potriveste nici unui element din listele clauzelor Else. Daca aceasta este situatia si nu este specificata o clauza Case Else, atunci executia urmeaza cu prima instructiune de dupa End Select.

Instructiunile Select Case pot fi scufundate unele in altele, structurile interioare fiind complete (fiecare structura are End Select propriu, includerea este completa).

Apeluri de proceduri si programe

În aceasta sectiune se prezinta doar functia Shell(), deoarece despre proceduri si apelul lor s-a discutat in capitolul 1.

Functia Shell()

Executa un program executabil si returneaza un Variant(Double) reprezentand ID-ul de task al programului in caz de succes; in caz contrar returneaza zero. Sintaxa este

Shell(pathname[,windowstyle])

unde

pathname este Variant (String). Contine numele programului care se executa, argumentele necesare si poate da calea completa (daca este nevoie).

windowstyle este Variant (Integer) si precizeaza stilul ferestrei in care se va executa programul (implicit este minimizat, cu focus).

Valorile posibile pentru argumentul windowstyle sunt

Constanta numita

Valoarea

Semnificatia

VbHide

Fereastra este ascunsa iar focus-ul este pe fereastra ascunsa.

VbNormalFocus

Fereastra are focus-ul si este dimensionata si pozitionata normal.

VbMinimizedFocus

Fereastra este afisata ca o icoana (minimizata) dar are focus-ul.

VbMaximizedFocus

Fereastra maximizata, cu focus.

VbNormalNoFocus

Fereastra este normala (restaurata la marimea si pozitia cea mai recenta) dar nu are focus-ul. Fereastra activa curenta isi pastreaza focus-ul.

VbMinimizedNoFocus

Fereastra minimizata, fara focus. Fereastra activa curenta isi pastreaza focus-ul.

Daca functia Shell nu poate porni programul specificat se va semnala eroare. Programul pornit prin Shell se executa asincron, deci nu exista certitudinea ca acest program se termina inainte de executia instructiunilor care urmeaza liniei Shell.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1304
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved