CATEGORII DOCUMENTE |
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;
În mediul de dezvoltare VBA, sintaxa instructiunilor este verificata automat dupa ce se trece la instructiunea urmatoare (prin Enter).
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:
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 ':'.
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 ':'
Identificatorii de linii pot fi utilizati in instructiuni de control, desi codul astfel construit nu respecta regulile programarii structurate..
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.
Î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.
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). |
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.
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.
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
Înainte de concatenare, operanzii care nu sunt siruri se convertesc la Variant(String). Expresiile Null sau Empty sunt tratate ca siruri de lungime zero ('').
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)]. |
|
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).
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.
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).
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.
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.
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.
Î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
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.
Realizeaza tranferul controlului executiei la o linie din aceeasi procedura.
unde line este o eticheta de linie sau un numar de linie din aceeasi procedura.
Permite controlul erorilor prin transferul controlului la rutine de tratare.
Observatie. Este prezentata in sectiunea dedicata controlului erorilor.
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.
Terminarea executiei programului sau oprirea temporara (pauza) se pot realiza prin instructiunile enumerate aici.
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
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.
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.
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.
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.
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]
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
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. |
Testeaza conditia la inceputul buclei, executa bucla numai daca rezultatul este True si continua astfel pana cand o noua evaluare produce False. |
Do Until. |
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. |
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
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.
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
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
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.
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.
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().
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).
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
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.
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
|
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 |
Vizualizari: 1304
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved