Această carte vă va ajuta să stăpâniți mediul de dezvoltare integrat VBA și să învățați cum să programați în VBA folosind obiecte, proprietăți, metode și evenimente. Metodele de programare discutate sunt ilustrate prin exemple care pot fi testate imediat în practică. Puteți aplica aceste cunoștințe atât pentru crearea și îmbunătățirea aplicațiilor de birou populare, inclusiv pentru aplicațiile Office XP, cât și pentru crearea propriilor aplicații.
Cartea este concepută pentru cei care vor să învețe rapid și fără prea mult efort să învețe cum să programeze pentru Windows utilizând VBA.
Carte: VBA pentru Dummies
Declare matrice ca fiind dinamică în următoarele cazuri.
* Dacă nu știți și nu știți dimensiunea matricei înainte de a executa programul.
* Dacă știți că mărimea matricei în timpul programului se va schimba.
* Dacă după terminarea utilizării matricei doriți să eliberați memoria pe care o ocupă pentru alte scopuri (matricele mari pot ocupa o mulțime de memorie care poate fi eliberată pentru a utiliza matrice dinamice).
Dim dateReports () ca dată
va pregăti VBA să folosească o serie de elemente de tip Date, de fapt nu creează o matrice până acum.
O matrice dinamică nu poate stoca date până când nu creați un matrice specificând de fapt dimensiunea acestuia. Pentru a face acest lucru, utilizați operatorul ReDim, ca în exemplul următor cu o matrice unidimensională:
Datele zilei reDim (numărul int de zile - 1)
Rețineți că dimensiunea matricei create de acest operator este specificată de o expresie care utilizează variabila, presupunând că valoarea acestei variabile este deja definită în program. Valoarea variabilei trebuie să fie redusă la 1 pentru a aduce numărul de elemente din matrice conform VBA numerotate de la 0 matrici, desigur, dacă nu ați modificat sistemul de numerotare adoptat în mod implicit, așa cum este descris în secțiunea „numerotarea elementelor matrice.“
Instrucțiunea ReDim trebuie utilizată intern. Aceeași matrice poate fi redefinită de câte ori este nevoie, oferind numere complet noi de dimensiuni și dimensiuni. Doar nu uitați că, cu depășirea obișnuită a matricei, conținutul său este complet distrus. De asemenea, nu puteți schimba tipul de date alocate unei matrice, cu excepția anumitor condiții, pentru a explica care este cazul în mod inutil de complicat.
Pentru a salva o parte din date atunci când înlocuiți o matrice, utilizați cuvântul cheie Conservare cu instrucțiunea ReDim. Această secvență de operatori declară o matrice dinamică, o creează ca o matrice bidimensională cu o anumită dimensiune și apoi mărește dimensiunea matricei în a doua dimensiune, fără a distruge datele deja existente:
Dim dblGalacticMasses () Ca dublu
ReDim conservă dblGalacticMasses (1 până la 30, 1 până la 50)
ReDim conservă dblGalacticMasses (1 până la 30, 1 până la 100)
De fapt, posibilitatea este foarte limitată Păstrați - atunci când se utilizează acest cuvânt cheie nu este permis să schimbe dimensiunea de matrice și se pot schimba dimensiunea doar ultima măsurătoare (dar încă mai trebuie să ReDim Păstrare declarație pentru a specifica setările pentru alte măsurători). În acest caz, puteți face dimensiunea matricei mai mică, dar datele stocate în elementele șterse vor fi pierdute pentru totdeauna.
Pentru a utiliza un element specific al matricei din program, tastați numele matricei urmat de paranteze cu indicele elementului specificat în ele. Indicele trebuie să specifice valori întregi pentru fiecare dintre dimensiunile matricei. De exemplu, expresia strSayings (4, 6) identifică în mod unic datele de șir din rândul 4 și coloana 6 într-o matrice bidimensională de rânduri.
În cadrul sistemului descris, puteți utiliza elemente de matrice ca variabile obișnuite. Puteți face următoarele:
* atribuiți unui element matrice o valoare; în următorul exemplu, valoarea este atribuită unui element specific al matricei tridimensionale de tip de date Valută:
curBigDough (5, 8, 19) = 27,99
* atribuiți o valoare stocată în matrice unor variabile, de exemplu:
"Nimeni nu vă va observa șosetele diferite."
"Îți vei întâlni pe vechiul tău prieten în supermarket."
intUserChoice = InputBox ("Pentru a afla viitorul dvs.", _
"introduceți un număr de la 1 la 10")
Apropo, acest cod de program poate fi îmbunătățit semnificativ dacă adăugați procesarea la intrarea greșită, posibil atunci când utilizatorul răspunde la funcția Input Box. Problemele de verificare a datelor în timpul intrării au fost discutate în Capitolul 10.
Pentru a afla cât de multe elemente de matrice poate stoca o măsurare, utilizați Ubound funcție care este utilă în special atunci când se ocupă cu matrice dinamice, ca la diferite puncte din programul de matrice dinamic pot conține numere diferite de elemente. Sintaxa funcției UBound este:
UBound [array_name, dimension]
Argumentul array_name specifică în mod clar numele matricei la care doriți să accesați și argumentul de dimensiune specifică un întreg care spune VBA ce dimensiune a array vă interesează. Dacă nu este specificată nici o măsurătoare, funcția UBound returnează dimensiunea primei dimensiuni a matricei.
Când creați pentru prima dată un matrice, elementele sale nu conțin informații valide. La un moment dat în program, va trebui să umpleți locurile vacante ale matricei cu date adecvate. Dacă aveți nevoie să puneți o mulțime de date dintr-o dată, cel mai bun mod de a face acest lucru este imbricat pentru bucle. Apoi, una pentru fiecare dimensiune a matricei. Pentru un contor de buclă, selectați de obicei o variabilă temporară declarată într-o procedură care conține toate aceste cicluri.
Această abordare este ilustrată de următorul program mic, în care o matrice tridimensională este populată cu valori întregi consecutive începând cu 1. Aici este codul său de program:
Const Mărimea ca Integer = 3
Dim dblMatrix (1 la dimensiune, l la dimensiune, l la dimensiune) Ca dublu
Dim I ca intreg, J ca intreg, ca intreg, X ca intreg
Pentru I = 1 la dimensiune
Pentru J = 1 la dimensiune
Pentru K = 1 la dimensiune
dbl Matrixf, J, K) = X
Ordinea ciclurilor de încorporare va determina ordinea umplerii matricei cu dacha. În schimb, din ordinea în care elementele matricei sunt umplute, valorile lor depind, de asemenea, adesea.
Pentru a explica acest lucru doar în cuvinte este prea dificil, așa că am de gând să folosească imagini. Din nou, uitați-vă la exemplul codului anterior. Să ne imaginăm o matrice tridimensională sub forma unui cub, compus din cuburi mici, adică elementele matricei.
O ilustrare a acestui experiment de gândire este prezentată în Fig. 13.2.
Fig. 13.2. Acest desen reprezintă o matrice pentru stocarea datelor; Săgețile cu litere corespund dimensiunilor matricei
Vă rugăm să rețineți că linia principală a acestui cod, dblMatrix (I, J, K) = X, variabilele I, J și K sunt, respectiv prima, a doua și a treia dimensiune a șirului. În Fig. 13.2 Am atribuit în mod arbitrar aceste scrisori pe laturile cubului, care definesc dimensiunile acestuia.
Acum, uitați-vă la modul în care aceste variabile sunt utilizate în buclă For. În continuare. Contorul bucla exterioară este eu, următorul J și ultimul, intern, K. Trebuie să înțelegem că VBA va începe să execute din bucla interioară, trecând prin ea prin toate buclele sale care conțin. Cuburile din Fig. 13.3 arată două momente consecutive chiar la începutul umplerii matricei din acest exemplu.
H până la bucla interior este executat, VBA nu se schimba valorile variabilelor I și J. Atunci când bucla internă pentru prima dată a trecut complet prima dată va avea posibilitatea de a face un pas ciclu următor tsikl- J. J- Acest lucru va crește valoarea și din nou începe executarea buclei interioare de la început până la end. Valoarea se modifică numai atunci când ciclul F este executat de trei ori. După creșterea, următorul strat al matricei începe să se umple (Figura 13.4).
Sper că acum veți înțelege modul în care schimbarea în ordinea ciclurilor de cuibărire se reflectă în ordinea umplerii matricei. Să presupunem că investiția ciclu de comandă este inversată, iar contorul buclei exterioare este acum K. Asta ar trebui să arate ca în acest caz, codul corespunzător (rețineți că operatorul de atribuire variabilă a rămas în aceleași locuri):
Fig. 13.3. Aceste două desene ilustrează secvența în care procedura de eșantion umple matricea pe măsură ce se execută buclă interioară For. următor:
Pentru K = 1 la dimensiune
Pentru J = 1 la dimensiune
Pentru I = 1 la dimensiune
dblMatrix (I, u, K) = X
Ca rezultat, matricea va arăta așa cum se arată în Fig. 13.5.
Fig. 13.4. Cel de-al doilea strat al matricei va fi completat numai după ce valoarea contorului celor mai externe pentru buclă For se schimbă. următor
Fig. 13.5. Această figură ilustrează ordinea umplerii matricei cu o procedură modificată
Matricea va conține aceleași valori ca și în primul caz, dar acestea sunt stocate de alte elemente ale matricei.
În VBA 6, puteți atribui conținutul unui singur tablou unui altul folosind o instrucțiune simplă cum ar fi
Matricea din stânga (cea la care sunt atribuite valorile) trebuie să fie dinamică, iar VBA o va redefini automat în funcție de dimensiunea și dimensiunea matricei din dreapta. Matricea care primește valoarea trebuie, de asemenea, să permită stocarea datelor de tipul care este atribuită datelor din matricea sursă.
În VBA 5, va trebui să copiați datele dintr-o matrice elementar, după cum urmează: