Ce este o variabilă și cum se declară corect? Declararea variabilelor. Dim operator

O variabilă este un container în care VBA stochează date. Mai în detaliu, este ca o cutie în care poți pune ceva pentru depozitare și apoi o poți scoate după cum este nevoie. Numai în acest caz, stocăm un număr, șir sau alte date într-o variabilă, pe care apoi le putem extrage din ea și le putem folosi în cod după cum este necesar.

Pentru ce este variabila? Pentru a stoca o valoare și a o aplica mai târziu în orice moment. De exemplu, suma este scrisă în celula A1, iar făcând clic pe butonul începe actualizarea raportului. După actualizarea raportului, suma din A1 se va modifica. Este necesar să verificați suma înainte de actualizare cu suma de după și, în funcție de aceasta, să luați unele măsuri. Variabila vă va permite doar să vă amintiți valoarea celulei înainte de a fi actualizată și să utilizați exact această valoare după actualizare.

Cerințe pentru variabile:

Puteți utiliza simboluri cu litere și numere ca nume de variabile, dar prima literă dintr-un nume de variabilă trebuie să fie întotdeauna o literă. Nu este permisă utilizarea punctelor, virgulelor, spațiilor și a altor semne de punctuație, altele decât caracterele de subliniere. Lungimea numelui nu trebuie să depășească 254 de caractere. De asemenea, nu puteți utiliza constantele rezervate ale editorului VBA ca nume pentru variabile. (de exemplu, Sub, Msgbox, ubound, Data etc.). De asemenea, cazul literelor nu este important pentru variabile.

Acum să ne uităm la principalele tipuri de date declarate în VBA care pot fi stocate în variabile:

Tip de date Ocupă un octet în memorie Limite valorice
octet 1 Numerele întregi din 0 inainte de 255
boolean 2 Adevărat sau Fals
Întreg 2 Numerele întregi din ( -32768 ) inainte de 32767
Lung 4 Numerele întregi din ( -2147483648 ) inainte de 2147483647
Singur 4 De la ( –3.402823E+38) inainte de ( –1.401298E-45) și din 1.401298E-45 inainte de 3.402823E+38
Dubla 8 Din ±1,79769313486232E+308 inainte de ±4,94065645841247E-324
Zecimal 12 Din ±79228162514264337593543950335 fără zecimale înainte ±7,9228162514264337593543950335 cu 28 de zecimale
Valută 8 De la ( –922337203685477.5808 ) inainte de 922337203685477.5807
Data 8 Din 01.01.100 inainte de 31.12.9999 (a nu se confunda cu datele din Excel - 01/01/1900 până la 31/12/2078)
Şir 1 Din 0 inainte de 65400 personaje pentru corzi fixeși puțin peste 2 miliarde pentru șiruri de lungime variabilă
Obiect 4 Orice obiect
Matrice Determinată de numărul și dimensiunea elementelor -
Variantă de la 16 Oricare dintre tipurile de date încorporate

După cum puteți vedea din tabel, Variant ocupă cea mai mare parte de memorie. Mai mult, dacă stochează date numerice. Dacă o astfel de variabilă stochează date de tipul șirului (text), atunci dimensiunea memoriei ocupate va fi măsurată începând de la 22 de octeți + lungimea șirului stocat în variabilă. Cum mai multa memorie o variabilă durează, cu atât este nevoie de mai mult timp pentru a se inițializa în memorie și cu atât mai lent se va executa codul. Acesta este motivul pentru care este important să setați în mod explicit tipul de date stocate într-o variabilă - acest lucru se numește declara o variabilă.

Tipul de date Decimal nu mai este utilizat, deci declarați o variabilă de acest tip Nu va funcționa în VBA - o astfel de încercare va duce la o eroare de sintaxă. Pentru a lucra cu date de tip Decimal, variabila trebuie declarată inițial ca Variant sau fără tip (de exemplu, Dim a), deoarece Tipul de date Variant este implicit în VBA și acceptă orice tip de date.

De asemenea, puteți atribui alte tipuri de date variabilelor care nu sunt în tabelul de mai sus - acestea sunt tipuri care sunt acceptate de modelul obiect al aplicațiilor la care este „conectat” VBA. De exemplu, dacă introduceți VBA din Excel, atunci biblioteca de tipuri de obiect Modele Excel activat în mod implicit și multe tipuri din acest model de obiect devin disponibile pentru variabile. Multe dintre ele sunt familiare tuturor: registru de lucru, foaie de lucru, interval, celule, diagramă etc. Acestea. Acestea sunt cărți, foi, celule, diagrame. Există multe tipuri, pentru aproape fiecare obiect și colecție. Nu are rost să discutăm totul aici. Vă pot oferi doar câteva rânduri de cod:

„Numele programului meu”

Declarațiile de variabile sunt descrise în detaliu mai jos.
Puteți citi mai multe despre accesarea intervalelor din VBA în acest articol: Cum să accesați un interval din VBA

Cum se declară variabile
De fapt, totul este foarte simplu. Acest lucru se face folosind operatorii de domeniu: Dim, Public, Static și operatorul de atribuire As. Cel mai comun operator este Dim. Să o luăm ca exemplu. Sintaxa declarației:

[operator domeniu] Nume_variabilă Ca [tip de date]

O greșeală foarte comună de declarare a variabilelor făcută de începători în VBA:

Dim MyVar1, MyVar2, MyVar3 ca număr întreg

Dim MyVar1, MyVar2, MyVar3 ca număr întreg

Se pare că pe baza logicii, tuturor variabilelor li se atribuie tipul de date Integer. Dar aceasta este o judecată eronată. Tipul Integer este atribuit numai ultimei variabile la care este „legat” de operatorul As - MyVar3. Toate celelalte variabile sunt de tipul de date Variant. Acestea. dacă nu specificați în mod explicit tipul de date stocate pentru variabilă (adică nu specificați un tip de date pentru acesta), apoi VBA însuși atribuie tipul de date Variant unei astfel de variabile, deoarece poate stoca orice tip de date. Și așa arată o atribuire corectă a tipului de date:

Dim MyVar1%, MyVar2%, MyVar3%

Există doar șase tipuri care pot fi declarate printr-o metodă similară:
! - Singur
# - Dublu
$ - șir
% - Număr întreg
& - Lung
@ - Moneda
La ce ar trebui să acordați atenție atunci când declarați variabile în acest fel: nu ar trebui să existe spații între numele variabilei și semnul de tip.
Eu personal prefer să folosesc prima metodă, adică. indicație completă a tipului. Este mai ușor de citit și de înțeles. Dar acestea sunt preferințele mele și în codurile dvs. aveți dreptul să utilizați o metodă convenabilă pentru dvs. - nu vor fi greșeli.

Acum să ne uităm la operatorii domeniului (Dim, Public și Static):

  • Dim - acest operator este folosit pentru a declara o variabilă, a cărei valoare va fi stocată doar în procedura în cadrul căreia este declarată această variabilă. Când se lansează o procedură, o astfel de variabilă este inițializată în memorie. Puteți utiliza valoarea ei numai în cadrul acestei proceduri, iar la finalizarea procedurii, variabila este descărcată din memorie (resetată la zero) și datele de pe aceasta se pierd. O variabilă declarată în acest fel este de asemenea numită variabilă locală. Cu toate acestea, folosind acest operator, puteți declara o variabilă care va fi disponibilă în orice procedură din modul. Este necesar să se declare o variabilă în afara procedurii - în zona de declarare (se citește ca prima linie din modul, după rândurile de declarare de tipul - Opțiune Explicit). Atunci valoarea variabilei va fi disponibilă în orice procedură numai a modulului în care a fost declarată această variabilă. Astfel de variabile sunt numite variabile la nivel de modul.
  • Static - acest operator este folosit pentru a declara o variabilă a cărei valoare este destinată să fie utilizată în cadrul unei proceduri, dar fără a pierde valoarea acestei variabile la finalizarea procedurii. Variabilele de acest tip sunt de obicei folosite ca contoare cumulate. O astfel de variabilă este inițializată în memorie prima dată când se execută procedura în care este declarată. La finalizarea procedurii, datele pentru variabilă nu sunt descărcate din memorie, dar nu sunt disponibile în alte proceduri. De îndată ce rulați procedura cu această variabilă din nou, datele pentru o astfel de variabilă vor fi disponibile în forma în care se aflau înainte de finalizarea procedurii. O astfel de variabilă este descărcată din memorie numai după ce proiectul este închis. (carti cu cod). În limbajul comun, astfel de variabile sunt mai des numite global(posibil datorită faptului că anterior astfel de variabile erau declarate folosind operatorul Global, care acum este învechit și nu este utilizat)
  • Public - acest operator este folosit pentru a declara o variabilă a cărei valoare va fi stocată în orice procedură de proiect. O variabilă declarată în acest fel trebuie declarată în afara procedurii - în zona de declarare. O astfel de variabilă este încărcată în memorie atunci când proiectul este încărcat (la deschiderea cărții)și stochează valoarea până când proiectul este descărcat (închiderea cărții). Îl poți folosi în orice modul și orice procedură de proiect. Important: Este necesar să declarați o variabilă în acest fel strict într-un modul standard. Astfel de variabile sunt numite variabile la nivel de proiect.
    Pentru o mai bună înțelegere a unde și cum să declare variabilele la nivel de proiect, două exemple mici.
    Anunț greșit

    Opțiune Explicit Sub main() Public MyVariable As String MyVariable = "Variabilă globală" "afișează valoarea curentă a variabilei MsgBox MyVariable "încercați să schimbați valoarea variabilei Call sub_main "arată valoarea modificată a variabilei MsgBox MyVariable End Sub" procedură suplimentară pentru modificarea valorii variabilei Sub ChangeMyVariable() MyVariable = „Și-a schimbat valoarea” End Sub

    variabilele nu vor fi vizibile în toate modulele tuturor procedurilor și funcțiilor proiectului deoarece:
    1. Operatorul Public nu are voie în interiorul unei proceduri (între Sub și End Sub), așa că VBA va arunca cu siguranță o eroare atunci când încearcă să execute o astfel de procedură - Atribut nevalid în Sub sau Funcție.
    2. Chiar dacă Public este înlocuit cu Dim, va fi deja variabilă de nivel procedurile și pentru alte proceduri nu vor fi disponibile.
    3. Pentru că declarația este incorectă - a doua procedură (ChangeMyVariable) nu știe nimic despre variabila MyVariable și, desigur, nu o va putea modifica.
    Anunț corect

    „deasupra variabilelor și constantelor globale pot exista doar declarații: Opțiunea explicită „declararea forțată a variabilelor Opțiunea de bază 1 „limita inferioară a tablourilor declarate începe de la 1 Opțiunea Comparați text „comparație de text fără majuscule „variabilă globală – prima linie, mai presus de toate procedurile Public MyVariable As String „proceduri și funcții suplimentare Sub main() MyVariable = „variabilă globală” „arată valoarea curentă a variabilei MsgBox MyVariable, vbInformation, „www.site” „încercarea de a schimba valoarea unei variabile Apelați ChangeMyVariable „afișați valoarea modificată a variabilei MsgBox MyVariable, vbInformation, „www.site” End Sub „procedură suplimentară de modificare a valorii unei variabile Sub ChangeMyVariable() MyVariable = „I-au schimbat sensul” End Sub

    „Numai declarațiile pot fi deasupra variabilelor și constantelor globale: Opțiune Explicit „Declararea forțată a variabilelor Opțiunea Baza 1 „limita inferioară a matricelor declarate începe de la 1 Opțiune Compare Text „Comparație text care nu ține seama de majuscule și minuscule” Variabila globală - primul rând, deasupra tuturor procedurilor Public MyVariable As String „proceduri și funcții ulterioare Sub main() MyVariable = „Variabilă globală” „care arată valoarea curentă a variabilei MsgBox MyVariable, vbInformation, „www.site” „încercând să schimbe valoarea variabilei Call ChangeMyVariable „afișând a modificat valoarea variabilei MsgBox MyVariable, vbInformation, "www ..procedure for changeing value of a variable Sub ChangeMyVariable() MyVariable = "S-a schimbat valoarea" End Sub

  • Operatorii de domeniu pot fi aplicați și procedurilor. Mai există un operator de domeniu disponibil pentru proceduri - Privat. O procedură astfel declarată este accesibilă doar din modulul în care este scrisă și o astfel de procedură nu este vizibilă în caseta de dialog pentru apelarea macro-urilor( Alt+F8)

Cum să denumești corect o variabilă:

"Care este cel mai greu lucru în a fi programator? Este să vină cu nume pentru variabile." :-) Dar nu este atât de ușor să veniți cu un nume de variabilă. Desigur, le puteți da nume precum: A, d, f, X, y etc. (Uneori fac asta singur, dar fie coduri simple, sau pentru ofuscarea codului special). Dar merită să vă gândiți: cum le veți gestiona într-un cod mare? Codul pentru 10 linii va tolera în continuare astfel de nume, dar mai multe proiecte majore- Nu aș recomanda operarea cu astfel de variabile în ele. Tu însuți vei fi confuz cu privire la ce variabilă este declarată și ce tip de date poate stoca și ce valoare îi este atribuită. Prin urmare, cel mai bine este să dați variabilelor dumneavoastră nume semnificative și să urmați convențiile de denumire a variabilelor. Ce fel de acord? Este foarte simplu: înaintea numelui principal al variabilei este plasat un prefix, indicând tipul de date pe care intenționăm să le stocăm în această variabilă. Am vorbit deja despre tipurile de date disponibile mai sus. Mai jos este un exemplu de tabel de corespondență de prefix la tipurile de date:

Prefix Tipul de date stocate
b boolean
bt octet
i Întreg
l Lung
s Singur
d Dubla
c Valută
dt Data
str Şir
obj Obiect
v Variantă

Personal, am refăcut-o puțin pentru mine, pentru că... Unele dintre notații mi se par rare. De exemplu, notez Dublu ca dbl, și Single ca sgl. Acest lucru mi se pare mai clar.

Care este un alt avantaj al specificării explicite a prefixului de date. VBA are operatori precum Def, care pot fi utilizați pentru a specifica tipul de date implicit pentru variabilele a căror primă literă de nume se încadrează în intervalul specificat în operator. De exemplu:

DefBool B-C Sub test() Dim bCheck, cCheck End Sub

Dar cred că o literă pentru un tip este suficient. Puteți specifica mai mulți operatori Def simultan.

DefBool B DefStr S Sub test() Dim bCheck, sCheck End Sub

DefBool B DefStr S Sub test() Dim bCheck, sCheck End Sub

Mai jos este o listă completă a operatorilor de tip și datele pe care fiecare le specifică:
DefBool- Setează tipul la Boolean
DefByte- Setează tipul de octet
DefCur- Setează tipul de monedă
DefDate- Setează tipul de dată
DefDbl- Setează tipul dublu
DefInt- Setează tipul la Integer
DefLng- Setează tipul lung
DefObj- Specifică tipul de obiect
DefSng- Setează tipul Single
DefStr- Specifică tipul șirului
DefVar- Specifică tipul Variantei
În mod implicit, VBA utilizează instrucțiunea DefVar pentru toate variabilele.

Ei bine, un punct important este numele direct semnificativ al variabilei. Numele variabilei ar trebui să reflecte aproximativ ceea ce va fi stocat în ea. De exemplu, creați un raport și trebuie să declarați două variabile: una este numele foii, cealaltă este numele registrului de lucru. Ai putea sa faci asa: str1, str2. Pe scurt, grozav. Dar dacă te gândești bine, cum poți înțelege care dintre aceste variabile stochează ce? În nici un caz. Trebuie să vă uitați prin cod și să vă amintiți cărei variabile i-a fost atribuită și ce valoare. Nu tocmai convenabil, nu? Ce se întâmplă dacă setați numele astfel: strBookName, strSheetName, atunci pare să fie mai clar ce vom stoca în ele. Acest lucru este convenabil nu numai pentru dvs. când lucrați cu cod, ci și pentru alte persoane care vă pot folosi codul în viitor. Le va fi mai convenabil să citească codul dacă acesta este formatat corect și variabilele sunt denumite în mod semnificativ. Și nu ar trebui să vă zgâriți cu lungimea numelui - numele ar trebui să fie de înțeles. Fara fanatism, desigur :-). Deși VBA ne permite să creăm variabile de până la 254 de caractere, este la fel de incomod să citim o astfel de variabilă ca și cu un singur caracter. Dar aici totul depinde de preferințele și imaginația ta.
Mică adăugare: Este mai bine să vă obișnuiți să numiți variabilele în alfabetul latin (adică alfabetul englez), deoarece pentru VBA Limba engleză„nativ” și este mai bine să-l folosești.

Un mic exemplu de utilizare a variabilelor în coduri:

Sub principal() „declarăm variabile cu atribuirea unor tipuri specifice„As String - text „As Long este un număr întreg Dim sAddress As String , sNewAddress As String , sShName As String Dim lRow As Long Dim rRange as Range „a atribuit variabilei rRange o referință la celula selectată curent Setați rRange = Selecție „schimbați selecția - selectați celula D9 Interval ("D9").Selectați „atribuiți variabilei adresa celulelor selectate sAdresa = Selectie.Adresa „atribuiți variabilei lRow valoarea primului rând al zonei selectate lRow = Selecție.Rând "arata mesajul MsgBox "Adresa zonei selectate: "& sAddress, vbInformation, „www.site” MsgBox „Numărul primului rând:”& lRow, vbInformation, „www.site” „atribuiți unei alte variabile valoarea adresei celulei A1 sNewAddress = „A1” „selectați celula specificată de variabila sNewAddres Interval(sNewAddress).Selectați MsgBox "Adresa zonei selectate: "& sNewAddress, vbInformation, „www.site” „selectați celula selectată inițial folosind variabila rRange rRange.Selectați MsgBox "Adresa zonei selectate: "& rRange.Address, vbInformation, „www.site” „setează valoarea variabilei sShName = „excel-vba” „redenumiți foaia activă cu numele specificat de variabilă ActiveSheet.Name = sShName End Sub

Sub main() „declară variabile cu alocarea unor tipuri specifice „As String - text „As Long - integer Dim sAddress As String, sNewAddress As String, sShName As String Dim lRow As Long Dim rRange as Range „a atribuit tipului celulei/interval variabilei " a atribuit variabilei rRange o legătură către celula selectată curent Set rRange = Selecție "schimbați selecția - selectați celula D9 Range("D9").Selectați "atribuiți variabilei adresa celulelor selectate sAdresă = Selecție.Adresă „atribuiți variabilei lRow valoarea primului rând al zonei selectate lRow = Selection .Row „afișați mesajul MsgBox „Adresa zonei selectate:” & sAddress, vbInformation, „www..site” „atribuiți valoarea adresa celulei A1 către o altă variabilă sNewAddress = "A1" "selectați celula specificată de variabila sNewAddress Range(sNewAddress).Selectați MsgBox "Adresa zonei selectate: " & sNewAddress, vbInformation, "www.site" "selectați inițial celula selectată folosind variabila rRange rRange.Select MsgBox "Adresa zonei selectate: " & rRange.Address, vbInformation, "www.site" "setează variabila valoare sShName = "excel-vba" "redenumiți foaia activă cu numele specificat de variabila ActiveSheet.Name = sShName End Sub

Articolul vă va ajuta să vedeți execuția pas cu pas a acestui cod: Captarea erorilor și depanarea codului VBA
Important! Dacă unei variabile i se atribuie o referință de celulă (Set var = Range ("A1")), atunci accesarea variabilei este identică cu accesarea celulei A1 în sine ori de câte ori se întâmplă acest lucru. Această atribuire nu își amintește proprietățile celulei înainte sau după - variabila stochează o referință la o anumită celulă și accesul este disponibil exclusiv la proprietățile celulei în momentul curent. Pentru a reține valoarea, culoarea unei celule sau chiar adresa (precum și alte proprietăți) înainte de a schimba celula și pentru a le aplica chiar și după schimbarea/mutarea celulei în sine, trebuie să vă amintiți exact proprietățile celulei în variabile:

Sub main() Dim val, l_InteriorColor As Long , l_FontColor As Long Dim rRange As Range „celula/interval de tip variabilă atribuită „a atribuit variabilei rRange o referință la celula activă Setați rRange = ActiveCell „Amintiți-vă proprietățile celulei val = rRange.Value "value l_InteriorColor = rRange.Interior.Color"цвет заливки l_FontColor = rRange.Font.Color "цвет шрифта !} „copiați o altă celulă și lipiți-o în locul celei active ActiveSheet.Range("D1" ).Copiați rRange „verificați că rRange are acum proprietăți complet diferite - cum ar fi D1 "rColor de umplere ale intervalului: " „Color fontului rRange:”& rRange.Font.Color & vbNewLine, vbInformation, „www.site” „atribuiți proprietăți din cele stocate în variabile rRange.Value = val „valoare rRange.Interior.Color = l_InteriorColor „culoare de umplere rRange.Font.Color = l_FontColor „culoare font „Verificați dacă parametrii rRange sunt returnați înainte de a copia MsgBox "rRange Value: " & rRange.Value & vbNewLine & _ "rColor de umplere ale intervalului: "& rRange.Interior.Color & vbNewLine & _ „Color fontului rRange:”& rRange.Font.Color & vbNewLine, vbInformation, „www.site” End Sub

Sub main() Dim val, l_InteriorColor As Long, l_FontColor As Long Dim rRange As Range „a atribuit tipului de variabilă celulă/gamă „a atribuit variabilei rRange o legătură către celula activă Set rRange = ActiveCell „amintește-ți proprietățile celulei val = rRange.Value "(!LANG :l_InteriorColor valoare = rRange.Interior.Color"цвет заливки l_FontColor = rRange.Font.Color "цвет шрифта "копируем другую ячейку и вставляем на место активной ActiveSheet.Range("D1").Copy rRange "проверяем, что rRange теперь имеет совершенно другие свойста - как у D1 MsgBox "Значение rRange: " & rRange.Value & vbNewLine & _ "Цвет заливки rRange: " & rRange.Interior.Color & vbNewLine & _ "Цвет шрифта rRange: " & rRange.Font.Color & vbNewLine, vbInformation, "www..Value = val "значение rRange.Interior.Color = l_InteriorColor "цвет заливки rRange.Font.Color = l_FontColor "цвет шрифта "проверяем, что rRange возвращены параметры до копирования MsgBox "Значение rRange: " & rRange.Value & vbNewLine & _ "Цвет заливки rRange: " & rRange.Interior.Color & vbNewLine & _ "Цвет шрифта rRange: " & rRange.Font.Color & vbNewLine, vbInformation, "www.сайт" End Sub!}

Acest lucru este valabil și pentru toate celelalte obiecte. Acestea. acele variabile ale căror valori sunt atribuite prin instrucțiunea Set.

constante
Există, de asemenea, un alt tip de „variabile” - constante. Aceasta este aceeași variabilă, doar (după cum sugerează și numele) nu poate fi schimbată în timpul execuției codului, deoarece este o valoare constantă și valoarea acesteia este atribuită o singură dată - înainte de a executa codul.

Const sMyConst As String = „Numele programului meu”

Const sMyConst As String = „Numele programului meu”

Constantelor li se pot atribui aceleași tipuri de date ca și variabilelor. Pentru domeniul/durata de viață suplimentară a constantelor, se folosește numai Public. Dacă domeniul de aplicare nu este specificat, atunci constanta va fi accesibilă doar din modulul în care este declarată. Aici aș dori să vă atrag atenția asupra faptului că Dim nu se mai folosește, deoarece Dim este un identificator numai pentru variabile. Cuplu diferențe importante declarații de constante din declarații de variabile:

  • Când declarați o constantă, trebuie să indicați în mod explicit că este o constantă folosind cuvântul cheie Const
  • imediat în momentul declarării, trebuie să atribuiți valoarea constantei: = „Numele programului meu”

În toate celelalte privințe, declararea și utilizarea constantelor este identică cu declararea variabilelor. Permiteți-mi să dau pe scurt câteva exemple.
Dacă constanta este declarată în interiorul unei proceduri:

Sub TestConst() Const sMyConst As String = „Numele programului meu” MsgBox sMyConst „afișează un mesaj cu numele programului End Sub Sub TestConst2() MsgBox sMyConst „va provoca o eroare Variabila nedefinită End Sub

Pentru a utiliza o constantă în toate procedurile unui proiect (cărți), trebuie să o declarați ca Publică.

În această parte, veți afla despre tipurile de date care pot fi manipulate de VBA, cum sunt stocate datele temporare în VBA, cum să combinați variabile și constante pentru a crea noi valori și cum să includeți funcții încorporate în expresii.

Lucrare de laborator nr 3. Prezentare generală a tipurilor de date VB. Variabile și

constante. Compatibilitatea tipului de date. Operator de atribuire. Operatori aritmetici și logici. Funcții încorporate

Scopul lecției: Cunoașteți tipurile de date. Să poată crea variabile. Fiți capabil să setați tipuri de date la variabile. Să poată crea constante denumite. Cunoașteți domeniul

variabile și constante. Cunoașteți conversia tipului. Aflați cum să utilizați operatorul de atribuire. Cunoașterea operațiilor aritmetice și logice. Aflați cum să utilizați concatenarea șirurilor. Aflați cum să utilizați încorporat Funcții VBA. Materiale pentru lecție: MS Excel 2003.

Prezentare generală a tipurilor de dateVizualDe bază (VB)

Înainte de a afla despre variabile, ar trebui să înțelegeți cum VBA stochează diferite tipuri de informații. VBA, ca majoritatea altor sisteme de programare, împarte datele pe care le procesează în numere, date, text și alte tipuri. Tip de date(date tip) este un termen care se referă la anumite tipuri de date pe care VBA le stochează și le poate manipula. În tabel 9 tipuri generalizate Date VBA, arată câtă memorie ocupă fiecare tip, descrie pe scurt tipurile de date și oferă intervalul de valori pe care tipul le poate stoca.

Tabelul 9– tipuri de date VBA

Tastați numele

Dimensiunea inocteți

Numere întregi pozitive de la 0 la 255

Numere întregi de la -32768 la 32767

Numere întregi lungi de la -2147483648 la 2147483647

Numere reale de precizie obișnuită cu

punctul de plutire.

numere negative:

de la -3,402823E38 la -1,401298E-45.

numere pozitive:

de la 1.401298E-45 la 3.402823E38

Numerele reale de dublă precizie cu

punctul de plutire.

numere negative:

de la -1,79769313486232E308 la

4.94065645841247E-324.

numere pozitive:

de la 4.94065645841247E-324 la

1.79769313486232E308

Numere cu până la 15 cifre înainte de virgulă zecimală și 4 cifre după aceasta (unități monetare). De la -922337203685477,5808 la 922337203685477,5807

Pentru a stoca valori logice; poate conține numai valori adevărate sau false

Tastați numele

Dimensiunea inocteți

Descriere și interval de valori

Pentru a stoca o combinație de informații despre dată și oră. Intervalul de date poate fi de la 1 ianuarie 100 până la 31 decembrie 9999. Interval de timp de la 00:00:00 la 23:59:59

Șir (șir de lungime variabilă)

10 octeți + Folosit pentru a stoca text. Lungimea șirului poate varia de la 0 caractere la (aproximativ) 2 miliarde de caractere

Şir

lungime fixă)

Lungime Folosit pentru a stoca text. Pot șiruri de caractere (unul conține de la unu la (aproximativ) 65400 de octeți per caracter)

16 octeți + 1 octet/caracter

Tipul Variant poate stoca orice alt tip de date. Intervalul pentru datele variante depinde de datele reale care sunt stocate. În cazul textului, intervalul corespunde tipului șirului de caractere; în cazul numerelor, intervalul este același cu cel al tipului Double

Folosit pentru a accesa orice obiect recunoscut de VBA. Stochează adresa unui obiect în memorie

În tabel 9 ați dat peste o reprezentare a datelor numită notă exponențială(științific notaţie), care este folosit pentru a afișa numere foarte mari și foarte mici într-un format compact pe dispozitive externe (monitor, imprimantă etc.). În notație exponențială, valorile sunt scrise fără zerouri înainte sau finale și au doar o cifră la stânga zecimalei. Numărul este înmulțit cu 10 într-o anumită măsură pentru a arăta unde este de fapt zecimala.

VBA are șase tipuri de date numerice diferite: octet, Întreg, Lung, Singur, DublaȘi Valută. Tipurile de date numerice sunt folosite pentru a stoca (și manipula) numere într-o varietate de formate, în funcție de tipul specific.

De obicei, un program VBA (ca orice alt program) „ia” decizii verificând dacă diferite condiții sunt adevărate. Pentru a facilita testarea condițiilor și pentru a se asigura că rezultatele acestor teste sunt stocate, VBA oferă un tip de date boolean. Valori booleene AdevăratȘi Fals numit boolean(boolean) valori. Numele lor este asociat cu numele matematicianului care a dezvoltat sistemul logicii matematice. Tipul de date boolean VBA se mai numește și boolean. Tipul boolean VBA necesită doi octeți de memorie și poate avea una dintre cele două valori: Adevărat sau Fals. Dacă afișați tipul boolean pe ecran, VBA îl convertește automat într-un șir care conține fie cuvântul Adevărat, sau Fals. Valorile booleene se obțin ca

rezultatul operației de comparare.

VBA folosește tipul Data pentru stocarea datelor și orelor. Nu trebuie să vă faceți griji cu privire la modul în care VBA stochează datele de tip Data, – puteți pur și simplu să afișați, să salvați sau să manipulați datele; VBA gestionează automat toate detaliile conversiei unui număr secvenţial în an, lună, zi şi oră. tip VBA Data este un tip date consecutive(serial Datele). Datele consecutive stochează data ca un număr de zile de la o dată de începere. Data de bază pentru tipul VBA Data este 30 decembrie 1899. VBA folosește numere negative pentru a reprezenta date înainte de 30/12/1899 și numere pozitive pentru a reprezenta datele după 30/12/1899. Numărul 0 reprezintă data însăși, 30.12.1899. Conform acestei scheme, 1 ianuarie 1900 se scrie cu numărul 2 (1 ianuarie 1990 este la 2 zile după 30 decembrie 1899), dar numărul –2 este data de 28 decembrie 1899 (cu două zile înainte de 30 decembrie 1899). ). Pentru a verifica acest lucru, scrieți o procedură simplă.

Exercitiul 1. Scrieți o procedură care imprimă un mesaj de dată.

Pentru aceasta:

Scrieți o procedură (lista 3):

Listare 3 ProcedurăDataTest

1 Sub DataTest()

2 Dim d As Data 3

Ca rezultat al acestei proceduri, data de bază va fi afișată pe ecran (Fig. 15).

Orez. 15 Într-o valoare de dată secvențială, partea întreagă (numerele din stânga zecimalei) este numărul total de zile de la data de bază. Data serialului VBA poate avea cifre la dreapta zecimalei; aceste numere indică ora din zi ca parte a zilei. O oră este 1/24 dintr-o zi (aproximativ 0,0416. La fel, un minut este 1/1440 dintr-o zi, iar o secundă este 1/86400 dintr-o zi. Puteți scădea o dată dintr-o alta, puteți adăuga la o dată sau scădeți numerele pentru a modifica valorile. De exemplu, dacă trebuie să determinați numărul de zile dintre două date, scădeți pur și simplu data anterioară din cea ulterioară, deoarece acestea sunt valori de tip. Data, VBA „știe” că scopul calculului este obținerea diferenței de zile dintre aceste două date. De asemenea, dacă trebuie să determinați o dată la 60 de zile după o dată dată, adăugați pur și simplu 60 la acea dată.

VBA are mai multe proceduri încorporate (descrise în această secțiune) pentru a extrage separat anul, luna, ziua, ora, minutul și secunda dintr-o variabilă precum Data.

Se apelează orice date text salvate într-un program VBA linii(siruri de caractere). Șirurile în VBA sunt salvate folosind tipul de date Şir. Șirurile își primesc numele deoarece datele text sunt de obicei tratate ca șiruri de caractere. Linia poate conține caractere text orice tipuri: litere ale alfabetului, numere, semne de punctuație sau diferite simboluri. Există două categorii de șiruri: șiruri de lungime variabilă, care cresc sau se micșorează în dimensiune și șiruri de lungime fixă, a căror dimensiune rămâne mereu aceeași. Toate șirurile din VBA sunt șiruri de lungime variabilă, cu excepția cazului în care specificați o lungime fixă. Majoritatea datelor introduse de utilizator (în casetele de dialog, celulele foii de lucru) sunt date șir. În plus, deoarece puteți afișa doar text pe ecran, toate celelalte tipuri de date trebuie convertite în date șir înainte de a le putea afișa pe ecran. Multe proceduri VBA încorporate (cum ar fi Msgbox) utilizați șir de date în toate sau unele dintre argumentele lor VBA oferă mai mulți operatori concatenare(înlănţui), adică pentru a uni și a compara șiruri. VBA are, de asemenea, câteva rutine încorporate pentru a vă ajuta să extrageți subșiruri din șiruri mai lungi, să găsiți caractere sau cuvinte într-un șir, să schimbați majusculele literelor dintr-un șir și așa mai departe. Această parte descrie operatori de șir VBA și proceduri pentru manipularea șirurilor VBA.

Tip de date Variantă este un tip de date special care poate stoca oricare dintre tipurile enumerate în tabel. 9 cu excepția tipului Obiect. VBA folosește tipul Variantă pentru toate variabilele, cu excepția cazului în care declarați în mod explicit tipul variabilei, așa cum este descris mai târziu în această secțiune. Tip de date Variantă preia caracteristici de un anumit tip pe care le dețin în prezent. De exemplu, dacă tipul de date Variantă conțin șir de date Variantă acceptă caracteristici tip String. Dacă tipul de date Variantă conțin date numerice, Variantă ia caracteristici de un anumit tip numeric, de obicei - Dubla, deși tipuri Variantă poate avea, de asemenea, caracteristici de tip Întreg, Lung, Singur sau Valută. Deși tipurile Variantă Convenabile și elimină o parte din munca procedurilor de scriere, necesită mai multă memorie decât orice alt tip de date, cu excepția șirurilor mari. În plus, operații matematice și operații de comparare pe tip de date Variantă sunt mai lente decât operațiuni similare pe orice alt tip de date. În general, ar trebui să evitați utilizarea variabilelor Variantă: dacă te vei baza pe variabile de tip Variantă, este posibil să vă dezvoltați un obicei de programare neglijentă și să găsiți și să remediați erorile în programe.

Variabile

Variabil(variabil) este numele pe care programatorul îl dă zonei

memoria computerului folosită pentru a stoca un anumit tip de date. Variabilele VBA pot stoca oricare dintre tipurile de date enumerate în tabel. 9.

Identificator(identificator) este numele pe care îl dați elementelor din procedurile și modulele pe care le creați, cum ar fi variabilele. Termenul de identificare se bazează pe faptul că numele pe care le creați identifică locații specifice de memorie (în cazul unui nume de variabilă), grupuri de instrucțiuni (în cazul unui nume de macro sau de procedură) sau alte elemente de program.

Nume de variabile nu este „sensibil” la starea de înregistrare(nu caz- sensibil), adică dacă numele variabilei este scris cu litere mari sau majuscule nu contează.

Cel mai simplu mod de a crea o variabilă este să o folosești într-o instrucțiune VBA. VBA creează o variabilă și rezervă memorie pentru locația de memorie a variabilei prima dată când acea variabilă apare într-o instrucțiune (de obicei, o instrucțiune care stochează o valoare a datelor într-o variabilă).

Stocarea unei valori de date într-o variabilă este apelată atribuirea unei variabile(atribuire cel variabil sau realizarea un misiune). Atribuirea se realizează folosind operatorul de atribuire, reprezentat prin semnul egal (=). Următoarea linie este un exemplu de atribuire a unei valori unei variabile:

Această instrucțiune stochează valoarea numerică 25 în locația de memorie specificată de numele variabilei MyVar.

Crearea unei variabile utilizând-o într-o instrucțiune este numită declarație implicită a variabilei(implicit variabil declaraţie). Folosind o variabilă într-o declarație, implicit spuneți (declarați) VBA că doriți să creați acea variabilă. Toate variabilele pe care VBA le creează prin declararea implicită a variabilei au un tip de date Variantă. Declarația implicită a variabilelor este cunoscută și sub denumirea de declarație a variabilei "pe fuga"(pe- cel- a zbura).

Declarațiile de variabile implicite sunt convenabile, dar au probleme potențiale. De exemplu, când aveți o variabilă numită MyVarși veți face o greșeală în numele mai târziu când introduceți Mvar. În funcție de locul în care apare în codul tău nume gresit variabilă, VBA poate arunca o eroare de rulare sau pur și simplu poate crea o nouă variabilă. Dacă VBA creează o nouă variabilă, este posibil să aveți probleme care sunt foarte greu de detectat.

Din aceste și alte motive, VBA vă oferă posibilitatea de a face explicit(explicit) declararea variabilelor.

Pentru a declara în mod explicit variabile, utilizați instrucțiunea VBA Dim cu următoarea sintaxă:

Dim Nume1 [, Nume2 ]

numeN este orice identificator de variabilă valid. Toate variabilele pe care le creați cu acest formular cuvânt cheie Dim, sunt variabile

tip Variantă.

O variabilă poate fi declarată o singură dată într-o procedură sau modul separat. Deoarece instrucțiunea Dim vine înaintea oricăror instrucțiuni care folosesc de fapt variabila, o puteți plasa oriunde în procedură. În practica de programare, este o regulă de bază să colectezi toate declarațiile explicite de variabile într-un singur loc la începutul unei proceduri.

Sarcina 2. Modificați procedura Salut Excel din partea anterioară, folosind o definiție explicită a variabilei.

Pentru aceasta:

b schimbați procedura Salut Excel (Lista 4):

Listare 4 ProcedurăSalut Excel

1 sub HelloExcel()

2 Dim HelloMsg " variabila pentru MsgBox 3

Operator Dim (la linia 2) din Lista 4 declară o variabilă Bună ziuaMsg și îi rezervă o zonă de memorie (în această subrutină Bună ziuaMsg este o variabilă de tip Variantă). Rândul 2 include un comentariu final care indică scopul acestei variabile. Linia 4 atribuie unei variabile Bună ziuaMsg linii "Buna ziua,excela!" . În continuare (pe linia 5) variabila HelloMsg este folosită ca unul dintre argumentele procedurii MsgBox. Funcţie MsgBox afișează aceeași casetă de mesaj ca înainte. Cu toate că MsgBox primește acum primul argument de la o variabilă, această variabilă conține aceleași informații despre șir care au fost scrise anterior (în listele părții anterioare) direct în operator MsgBox.

Toate variabilele din VBA, indiferent dacă sunt declarate implicit sau explicit, sunt Variante, cu excepția cazului în care specificați tipul variabilei în instrucțiunea care o declară. Pentru anunt dactilografiat variabilă și tipul acesteia folosind operatorul Dim adăugați cuvântul cheie As după variabilă și apoi introduceți numele tipului de date pentru acea variabilă. Iată sintaxa generală pentru utilizarea operatorului Dim la declararea variabilelor tastate:

Dim varnamel [, varname2 ]

varnameN reprezintă orice nume valid de variabilă VBA, a tip N – oricare dintre numele tipurilor de date VBA.

Odată ce o variabilă tipizată este declarată, indiferent dacă variabila este declarată explicit sau implicit și cum este specificat tipul, acea variabilă păstrează același tip atâta timp cât există. Nu puteți redeclara o variabilă sau redefini tipul acesteia.

Cu o declarație implicită, puteți specifica și tipul variabilei prin adăugare

caracter special numit simbol definiție tip(tip- definiție caracter), până la sfârșitul numelui variabilei. În tabel Tabelul 10 prezintă simbolurile definiției tipului VBA și tipurile pe care le reprezintă. Tabelul 10– Simboluri de definire a tipului

Tip

Simbol de definiție

Tip

Simbol definiții

ÎntregLung

ValutăDubla

Caracterele de definire a tipului pot apărea numai la sfârșitul unui nume de variabilă. Deși ar trebui să știți ce simboluri de definire a tipului sunt și cum sunt ele utilizate, rareori trebuie să le utilizați — folosirea instrucțiunii Dim cu cuvântul cheie As este mult mai ușor și mai clar. Majoritatea programatorilor VBA nu folosesc simboluri de definire a tipului.

Sarcina 3. Modificați procedura Salut Excel din sarcina 3, folosind definiția unei variabile tipizate.

Pentru aceasta:

b schimbați procedura Salut Excel (Lista 5):

Listare 5 ProcedurăSalut Excel

1 sub HelloExcel()

2 Dim HelloMsg ca șirul 3

    HelloMsg = "Salut Excel!"

    Title$ = „Primul meu program”

    MsgBox HelloMsg, Title$

Această versiune a procedurii Salut Excel funcționează la fel ca și cele anterioare. Rândul 1 conține declarația de procedură. Pe linia 2 declarația Dim declară în mod explicit o variabilă Bună ziuaMsg. Din moment ce operatorul Dim include cuvântul cheie La fel de și tastați numele Şir, variabil Bună ziuaMsg are tip Şir. Linia 4 atribuie textul mesajului unei variabile șir Bună ziuaMsg. Linia 5 declară implicit o variabilă Titlu$și, în același timp, atribuie variabilei textul titlului casetei de mesaj. Deoarece numele variabilei Titlu$ se termină cu un caracter de definire a tipului pentru un șir, această variabilă este, de asemenea, de tip String. În cele din urmă, linia 6 folosește operatorul MsgBox pentru a afișa o casetă de mesaj; în această declarație, atât textul mesajului, cât și bara de titlu a ferestrei sunt variabile: Bună ziuaMsg Și Titlu$, respectiv.

După adăugarea unui simbol de definire a tipului la o variabilă, trebuie să includeți un simbol de definire a tipului de fiecare dată când utilizați numele variabilei.

Indiferent dacă sunt declarate variabile de tip Şir folosind operatorul Dim sau prin adăugarea caracterului de definire a tipului $, variabilele șir pe care le creați sunt implicit șiruri de lungime variabilă.

Variabilele șirului de lungime variabilă își schimbă lungimea în funcție de lungimea șirului stocat de variabilă. Uneori poate fi necesar să utilizați linia lungime fixă(fix- lungime). Corzile cu lungime fixă ​​au întotdeauna aceeași lungime. Următoarea linie arată sintaxa generală pentru crearea unui șir de lungime fixă:

Dim varname Ca șir * N

varname este orice nume de variabilă valid, a N – este orice număr de la 1 la 65400 de caractere

Domeniu de aplicare: Disponibilitate variabilă

Termen domeniul de aplicare(domeniul de aplicare) se referă la domeniul de aplicare al unei proceduri sau al unui modul VBA în care o anumită variabilă, procedură sau alt identificator este accesibilă. Această parte descrie două niveluri de bază de domeniu: procedural și modular. Variabilele, procedurile și identificatorii care sunt accesibile numai în cadrul unei proceduri au un domeniu de aplicare la nivel procedural, iar cei care sunt accesibile pentru toate procedurile dintr-un modul au domeniul de aplicare la nivel de modul.

O variabilă declarată într-o procedură este accesibilă numai prin acea procedură. De exemplu, variabilă Bună ziuaMsg de la rândul 2 din Lista 5, este accesibil doar în procedură Salut Excel; nicio altă procedură nu are acces la această variabilă.

Prin urmare, ei spun că variabila Bună ziuaMsg Are domeniul de aplicare la nivel procedural(procedură- nivel domeniul de aplicare). De fapt, variabila Bună ziuaMsg există doar în timp ce VBA execută procedura Salut Excel.

Sarcina 4. Creați două proceduri al căror domeniu de aplicare este variabilele la nivel procedural.

Pentru aceasta:

b introduceți două proceduri finalizate (Lista 6):

Listare 6 ProcedurăSalut Excel

1 sub HelloExcel()

2 Dim HelloMsg ca șirul 3

    HelloMsg = "Salut Excel!"

    MsgBox HelloMsg, „Primul meu program”

8 Sub HelloDave()

9 Dim HelloMsg ca șir 10

    HelloMsg = "Bună ziua, Excel!"

    MsgBox HelloMsg, „O altă casetă de mesaje”

Rândurile 1–6 conțin aceeași procedură Salut Excel din Lista 4, care funcționează exact la fel. O procedură a fost adăugată la modul Bună,Dave, care începe la rândul 8 din Lista 6. Procedură Bună,Dave funcționează la fel ca procedura Salut Excel, afișează doar un mesaj text și un titlu diferit în caseta de dialog. Pe liniile 2 și 9, ambele proceduri folosesc operatorul Dim pentru a declara local variabile cu numele Bună ziuaMsg.

Uneori este necesar ca mai multe proceduri să aibă acces la aceeași variabilă. De obicei, este mai eficient să calculați o valoare o dată, să o stocați într-o variabilă și apoi să utilizați acea variabilă în mai multe proceduri decât să calculați aceeași valoare din nou și din nou.

VBA vă permite să declarați variabile care sunt accesibile pentru mai multe proceduri. Când o variabilă este disponibilă pentru toate procedurile dintr-un modul, se spune că acea variabilă are domeniu de aplicare nivel modular(modul nivel). VBA limitează domeniul de aplicare al unei variabile la nivel de modul la modulul în care este declarată variabila (VBA oferă modalități de a extinde domeniul de aplicare a unei variabile și mai mult; aceste metode sunt descrise în continuare).

Pentru a face o variabilă disponibilă pentru toate procedurile dintr-un anumit modul, plasați instrucțiunea Dim pentru aceasta la începutul modulului înaintea oricărei declarații de procedură.

Exercitiul 1

Creați două proceduri și o singură declarație de variabilă la nivel de modul (mutați instrucțiunea la linia 1 Dim cu variabila Bună ziuaMsg eliminând liniile 2 și 9 din Lista 6).

Numele variabilei trebuie să fie unic în domeniul său de aplicare. Cu toate acestea, este posibil să aveți variabile cu același nume activate diferit niveluri de aplicare. Când variabilele au același nume, dar domenii diferite, VBA folosește variabila cu cel mai mult local(local) domeniul de aplicare.

Necesită declararea explicită a variabilelor

Deși declararea implicită a variabilelor (declararea variabilelor pur și simplu prin utilizarea lor) este convenabilă, are unele probleme. Atunci când variabilele sunt declarate implicit, există riscul de a crea din neatenție o variabilă nouă atunci când ar trebui să utilizați una existentă sau de a folosi o variabilă existentă atunci când utilizatorul intenționează să creeze una nouă. Ambele situații duc la erori în cod care sunt foarte greu de urmărit.

Pentru a facilita identificarea erorilor legate de declarațiile implicite de variabile în orice moment, VBA oferă comanda OpțiuneExplicit. Folosind OpțiuneExplicit VBA cere ca toate variabilele să fie declarate (folosind operatorul Dim) înainte de a le folosi în modul.

Pentru a seta modul în care VBA necesită declarații explicite pentru toate variabilele dintr-un modul, adăugați comanda OpțiuneExplicit la zona de declarare a modulului, adică la începutul modulului înaintea oricărei declarații de variabilă sau de procedură. Comenzi precum OpțiuneExplicit, sunt numite directivele compilatorului(compilator directive).

Echipă OpțiuneExplicit afectează doar modulul în care apare. Dacă proiectul care conține acest modul conține și alte module, acestea nu sunt afectate de comandă OpțiuneExplicit. Trebuie să includeți comanda Option Explicit în fiecare modul care necesită declarații explicite de variabile.

De la includere OpțiuneExplicitîn toate modulele este foarte util, VB Editor oferă o modalitate de a include automat această comandă în fiecare modul nou atunci când îl creați. Pentru ca VB Editor să adauge comanda OpțiuneExplicit Pentru fiecare modul nou, urmați acești pași:

ь selectați o comandă Instrumente/ Opțiuni (Serviciu/Opțiuni); Editorul VB afișează caseta de dialog Opțiuni;

ь faceți clic pe filă Editor (Editor) pentru a afișa opțiunile de editare, dacă este necesar;

ь bifați caseta de selectare Solicita Variabil Declaraţie (Descrierea explicită a variabilelor);

ь selectați Bine. Editorul VB închide caseta de dialog Opțiuni.

Exercițiul 2

Setați comanda la activare automată Opțiune Explicit în fiecare modul nou când este creat.

constante

Constant(constant) este o valoare dintr-un program VBA care nu se modifică. Exemplele de proceduri deja prezentate mai sus folosesc constante șir cum ar fi "Buna ziua,excela!" Și „Primul meu program”. Se numesc constante ca acestea constante literale(literal constante), deoarece valoarea literală este scrisă direct în cod.

De asemenea, puteți scrie constante numerice literale și date în codul VBA; exemple de constante numerice literale includ numere 25 , 3.14 . Exemplele de constante de dată literale includ datele #12/31/96# sau #28 octombrie 1997#(Veți afla mai multe despre scrierea constantelor date mai târziu în această parte).

VBA vă permite să creați constante numite(numit constante). O constantă numită, ca o variabilă, are un nume dat; acest nume reprezintă o valoare specifică imuabilă. Cu toate acestea, spre deosebire de o variabilă, valoarea unei constante numite nu se schimbă niciodată. Următoarea linie arată sintaxa generală pentru declararea constantelor numite:

Const Nume = valuel [operator Nume2… ] _

[, patheZ =valoare3 [operator Nume4 ] … ]

numeN reprezintă orice identificator valid, valoarea N – orice valoare de date: numerică, șir sau dată, a operator – o operație aritmetică sau de comparare între două nume de constante descrise anterior. Următoarele rânduri arată mai multe declarații de constante numite: Const Pi = 3.14, text = "Bună Excel!"

Const Pi2 = 2*Pi

Domeniul de aplicare al constantelor

Ca și în cazul variabilelor, puteți declara constante numite în proceduri sau în zona de declarare la începutul unui modul. O constantă declarată într-o procedură are domeniul de aplicare la nivel procedural, în timp ce o constantă declarată în domeniul de aplicare a declarației unui modul are domeniul de aplicare la nivel modular. Constantele numite urmează aceleași reguli de domeniu ca și variabilele.

Scrierea constantelor literale

Când scrieți constante de șir literal în codul VBA, urmați aceste reguli:

constantele șirului b trebuie să fie incluse în ghilimele duble (");

ь este o constantă șir goală (numită linia zeronul şir sau gol şir) se notează prin două ghilimele duble fără nimic între ele ("");

b constanta șirului trebuie să fie toate pe aceeași linie.

Când scrieți constante numerice literale în codul VBA, urmați aceste reguli:

ь constantele numerice trebuie să fie formate numai din caractere numerice de la 0 la 9;

b o constantă numerică poate începe cu un semn (–) și poate conține un punct zecimal;

b Puteți utiliza notația exponențială pentru constante numerice.

VBA recunoaște constantele date în oricare dintre mai multe formate diferite; Trebuie să plasați toate constantele date între semnele lire sterline (#). Următoarele rânduri arată unele dintre formatele constante de dată pe care VBA le recunoaște: #2-5-97 21:17:34# #5 februarie 1997 21:17:34# #Mag-31-97# #15 aprilie 1997#

Indiferent de care dintre următoarele formate este scrisă o constantă literală de tipul Date, VBA reformatează constanta (când punctul de inserare este eliminat din linie după scrierea constantei) pentru a se conforma cu unul dintre următoarele două formate, în funcție de dacă Constanta dată conține informații despre oră: #2/5/1997 9:17:34 PM# #2/5/1997# Există doar două constante booleene corecte: Adevărat și Fals.

Specificarea unui tip constant

Când declarați o constantă numită sau utilizați o constantă literală, VBA „crede” că valoarea reprezentată de acea constantă are

tipul de date care se potrivește cel mai mult cu expresia atribuită constantei.

În VBA, puteți seta tipul unei constante. Sintaxa generală pentru declararea unei constante tipizate este:

Const Nume La fel de tip = valoare[, Nume La fel de tip = valoare]

Nume este orice nume constant valid, tip – numele oricărui tip de date VBA și valoare – valoarea pe care o atribui constantei.

Următoarea linie ilustrează declararea corectă a unei constante cu un anumit tip:

Const Pi ca dublu = 3,14

Internconstante

VBA oferă mai multe constante interne(intrinsec constante), numit si constante predefinite(predefinite constante). O constantă internă este o constantă numită care a fost definită de dezvoltatorii VBA. Constantele interne definite de VBA încep toate cu litere vb pentru a indica faptul că sunt definite de limbajul Visual Basic pentru aplicații (sau Visual Basic). De exemplu, constante vbOKOnly, vbOKAnulare sunt definite de VBA. Constantele interne ale Excel 2002 încep cu litere xl pentru a clarifica faptul că sunt definite de Excel. Datorită constantelor interne, este mai ușor să utilizați unele dintre procedurile încorporate ale VBA, cum ar fi instrucțiunea MsgBox, despre care știți deja și operatorul InputBox, care sunt discutate mai târziu în această parte.

Afișează ferestrele de mesaje. Primirea datelor de la utilizator

Primirea datelor de la utilizator, stocarea lor într-o variabilă și afișarea rezultatelor acțiunilor efectuate asupra acesteia sunt elementele de bază necesare pentru a scrie proceduri interactive. Interactiv(interactiv) procedura este o procedură care face schimb de informații cu utilizatorul, adică procedura interacționează cu utilizatorul prin afișarea mesajelor și primirea intrărilor.

Funcţie MsgBox afișarea unei casete de mesaj are următoarea sintaxă:

MsgBox(Prompt [, Butoane ] [, Titlu ] [, HelpFile , Context ])

argument Prompt MsgBox afișează această linie într-o casetă de dialog; trebuie să ofere întotdeauna un argument Prompt, deoarece aceasta este argument necesar(necesar argument). Argument Butoane (argument opțional), este o expresie numerică care determină butoanele și mesajele afișate în caseta de dialog. Argument Titlu reprezintă orice valoare de șir (literală, constantă sau variabilă). MsgBoxTitlu, VBA se afișează în bara de titlu a casetei de dialog MsgBox cuvânt " Microsoftexcela" . Argument HelpFile – fișier de ajutor, Context – secțiune din fișierul de ajutor. Textul mesajului poate fi inclus între paranteze, dar parantezele sunt opționale atunci când funcția MsgBox

folosit ca operator.

Datele introduse de utilizator sunt apelate date de intrare(intrare). Pentru a primi informații de la utilizatorul unei proceduri, utilizați funcția InputBox. Funcţie(funcţie) este un tip special de procedură VBA care returnează o valoare. Funcţie InputBox afișează o casetă de dialog care conține text care solicită utilizatorului să introducă o anumită valoare și o casetă de text pentru introducerea acelei valori. Caseta de dialog afișată InputBox, contine si butoane de comanda BineȘi Anulare.

Funcţie InputBox are următoarea sintaxă:

stringvar=InputBox( Prompt[, Titlu] [, Mod implicit] [, XPos] [, YPos] _

[, HelpFile, Context])

Aici stringvar reprezintă orice variabilă care poate stoca un șir (sau o variabilă de tip Şir, sau - Variantă). Argument Prompt reprezintă orice valoare de șir (literală, constantă sau variabilă). InputBox afișează acest șir ca prompt într-o casetă de dialog; trebuie să ofere întotdeauna un argument Prompt, deoarece aceasta este argument necesar; toate celelalte sunt optionale. Argument Titlu este al doilea argument pentru InputBox. Titlu reprezintă orice valoare de șir (literală, constantă sau variabilă). InputBox afișează textul acestui șir în bara de titlu a casetei de dialog. Dacă omiteți argumentul Titlu, VBA se afișează în bara de titlu a casetei de dialog InputBox cuvânt " Microsoftexcela" . Argument Mod implicit – o expresie șir afișată în câmpul de introducere ca implicită dacă utilizatorul nu introduce un alt șir; dacă acest argument este omis, câmpul de intrare este gol. Argumente XPos Și YPos pot fi orice expresii numerice. Aceste argumente vă permit să specificați unde în fereastra activă apare fereastra de introducere și sunt coordonatele colțului din stânga sus al casetei de dialog: XPos – distanta orizontala de la marginea din stanga a ferestrei; YPos – aceasta este distanța verticală de la marginea superioară a ferestrei. Ambele distanțe sunt măsurate în twips ( twips); Un twip este egal cu 1/20 de punct (un punct este măsurarea unui font imprimat). Deoarece un punct este de 1/72 de inch, un twip este de aproximativ 0,0007 inch. Ultimele două argumente opționale ale funcției InputBox- Acest HelpFile Și Context. Ele au același scop ca și argumentele funcției similare MsgBox.

Utilizarea argumentelor funcției numite

După cum probabil ați observat, este ușor să omiteți accidental virgulele sau să rearanjați valorile argumentelor în funcții care au argumente opționale sau argumente multiple, în ciuda ajutorului proprietății Auto Rapid (Informatie scurta) Editor VB. Omiterea sau rearanjarea argumentelor din lista de argumente a unei funcții poate duce la erori de nepotrivire de tip. Este posibil ca eroarea (și mai gravă) să nu fie detectată. Pentru a preveni erorile de programare și pentru a facilita utilizarea funcțiilor care au argumente opționale, VBA oferă o alternativă la listarea valorilor în lista de argumente într-o anumită ordine. De asemenea, puteți transfera

valorile argumentului funcției folosind argumente numite(numit argumente) funcții. Rândurile următoare arată două afirmații MsgBox, care au același rezultat; Prima declarație folosește metoda obișnuită de enumerare a argumentelor, iar a doua utilizează metoda argumentelor numite:

MsgBox AnyMsg, AnyTitle

MsgBox Prompt:=AnyMsg, Title:=AnyTitle

Simbolul care atribuie o valoare unui argument numit (:=) nu este exact același cu operatorul obișnuit de atribuire (=). Dacă omiteți două puncte (:) când atribuiți o valoare unui argument numit, VBA nu va detecta neapărat o eroare de sintaxă, dar poate să nu interpreteze corect instrucțiunea. Când VBA execută această instrucțiune, afișează una dintre mai multe erori posibile de rulare, adesea o eroare de nepotrivire de tip.

Nu puteți combina argumente numite cu o listă de argumente obișnuită în același apel de funcție. Trebuie să utilizați fie argumente numite, fie o listă de argumente obișnuite pentru fiecare apel de funcție individual.

Sarcina 5. Scrieți o procedură care calculează aria unui cerc, dar obține raza cercului de la utilizatorul procedurii.

Pentru aceasta:

Introduceți procedura (Listing 7):

Lista 7 – Primirea datelor de intrare folosind un operatorInputBox

    Const Pi As Single = 3,14 "aproximație a valorii pi

    Dim CircleArea As Single " salvează aria calculată a cercului 3

4 Sub List3_07()

    Const BoxTitle = „Aria cercului"!}

    Dim Raza ca single, Temp ca șir 7

    Temp = InputBox ("Introduceți raza " & Chr(13) & "cerc", BoxTitle)

    Raza = CSng(Temp)

    CircleArea = Pi * Raza * Raza

    MsgBox CircleArea, vbInformation + vbOKCancel, BoxTitle

Rândurile 1 și 2 din Lista 7 declară o constantă Pi și o variabilă CircleArea nivel modular. Rândul 4 conține declarația de procedură reală. Linia 5 declară o constantă de nivel procedural BoxTitle; această constantă are doar acces local în procedură List3_07. Pe linia 8 instrucțiunea apelează funcția InputBox. Acesta afișează primul argument ca text într-o casetă de dialog, solicitând utilizatorului să introducă valori de un anumit tip. În această declarație InputBox afișează textul „Introduceți raza cercului” (funcția Chr(13) - caracter de linie nouă) pentru a spune utilizatorilor procedurii ce valoare ar trebui să introducă. InputBox folosește al doilea argument,

12 End Sub

reprezentată printr-o constantă BoxTitle, ca titlu al casetei de dialog. La executarea instrucțiunii InputBox este afișată o casetă de dialog (Fig. 16)

Aria unui cerc

Introduceți raza cercului

Orez. 16 Utilizatorul introduce un număr în caseta de text și selectează un buton de comandă Bine sau Anulare pentru a închide caseta de dialog la fel ca orice altă fereastră Windows. Ori de câte ori apelați orice funcție, trebuie să utilizați cumva valoarea returnată a funcției. Se apelează valoarea returnată de funcție rezultatul funcției(funcţie rezultat). După cum se arată pe linia 8 în cazul funcției InputBox, al cărui rezultat este atribuit unei variabile Temp. Rezultatul funcției InputBox este întotdeauna un șir (de aceea variabila Temp a fost anunțat ca Şir). Din moment ce variabila Temp a fost declarat în mod explicit ca Şir, valoarea șirului trebuie convertită într-o valoare numerică înainte de a putea fi utilizată în calcule matematice. Linia 9 din Lista 7 face exact asta, folosind funcția VBA încorporată CSng pentru a converti intrarea utilizatorului într-un număr de tip Single.

Expresii înVizualDe bază

Expresie(expresie) este o valoare sau un grup de valori care exprimă o singură valoare. Fiecare expresie calculat la(sau are rezultatul) unui sens separat. Expresiile constau din una sau mai multe dintre următoarele părți: constante (literal sau numit), variabile (orice tip de date), semne operator, matrice, elemente de matrice, funcții.

Toate expresiile au ca rezultat o singură valoare a unui anumit tip de date. Expresiile pot avea ca rezultat, de asemenea, una dintre valorile speciale Gol(o variabilă neinițializată de tip Variantă sau rezultatul unei expresii care conține o variabilă de tip neinițializată Variantă) sau Nul(Nul reprezintă o expresie care conține date nevalide). Când utilizați un caracter într-o expresie, elementele de date (variabile sau constante) pe care se efectuează acțiunea sunt numite operanzi(operanzi); majoritatea operațiilor necesită doi operanzi.

Compatibilitatea tipului de date. Conversie automată a datelor

Nu toate tipurile de date sunt compatibile între ele și nu puteți utiliza tipuri de date incompatibile în aceeași expresie. De exemplu, adăugarea aritmetică a unui șir la un număr nu are sens, deoarece o astfel de expresie nu are sens și VBA nu o poate evalua.

Multe tipuri de date sunt compatibile între ele. De exemplu, poți

combina diferite tipuri de date numerice în aceeași expresie; VBA efectuează automat conversiile de tip necesare pentru diferite tipuri numerice. De asemenea, VBA poate converti uneori automat alte tipuri de date, astfel încât toate tipurile dintr-o expresie să fie compatibile, deși acest lucru nu este întotdeauna posibil. Este foarte important să controlați și să cunoașteți tipul expresiei deoarece dacă expresiile conțin tipuri incompatibile, VBA aruncă o eroare de rulare - eroare nepotrivire de tip(tip- nepotrivire). Atunci când procesează o expresie care conține diferite tipuri de date, VBA „încearcă” mai întâi să rezolve orice diferențe de tip prin conversia valorilor din expresie în tipuri de date compatibile. Dacă conversia tipului nu reușește să rezolve orice diferență, este afișată o eroare de rulare și procedura se oprește. De exemplu, în expresia 25 & Computer Science, VBA efectuează întotdeauna concatenarea șirurilor (unând două șiruri), indiferent de tipurile de variabile; rezultatul este tipul Şir; această expresie nu provoacă niciodată o eroare de nepotrivire de tip.

De obicei, VBA convertește toate tipurile de date numerice dintr-o expresie în tipul de cea mai mare precizie și apoi dă acel tip rezultatului expresiei. De exemplu, dacă expresia conține valori numerice cu tipuri ÎntregȘi Singur, rezultatul expresiei este tipul Singur– tipul de cea mai mare precizie în această expresie. Dacă atribuiți rezultatul unei expresii numerice unei variabile cu o precizie mai mică decât tipul real al rezultatului expresiei, VBA rotunjește rezultatul expresiei până când precizia acesteia se potrivește cu tipul așteptat. De exemplu, dacă atribuiți o expresie numerică care are ca rezultat un număr de tipuri Dubla, tip variabil Întreg, VBA rotunjește numărul de precizie dublă pentru a tasta Întreg.

Când convertiți un număr într-un șir, VBA creează un șir care conține toate cifrele acelui număr și o zecimală (dacă numărul are una). Numărul 3413.72 (punctul este folosit pentru a scrie un număr în cod), de exemplu, este convertit în șirul „3413.72”. Dacă numărul este foarte mare sau foarte mic, VBA poate crea o reprezentare șir a numărului în notație științifică; de exemplu, numărul 0,0000000004927 este convertit în șirul „4.927E–11”.

VBA poate converti un șir într-un număr numai dacă șirul conține o reprezentare simbolică a numărului în notație zecimală sau științifică. Șirurile „988.6”, „812”, „-186.7”, „1,ZE10” reprezintă numere, iar VBA le poate converti în numere. Rândurile „1.045”, „74.550 USD” și „Bună dimineața!” nu poate fi convertit în numere.

Când VBA convertește valorile de tip booleanîn cifre, adică Adevărat este convertit la 1 și valoarea Fals– la 0. Când VBA convertește un număr într-un tip boolean, zero este convertit în Fals, iar orice altă valoare este convertită în Adevărat. Când VBA convertește valorile de tip boolean la șiruri, VBA folosește șirul „True” pentru Adevăratși „Fals” – pentru Fals.

Când VBA convertește tipul de date Data la un număr, rezultatul este o valoare numerică - un număr de tip Dubla, care conține numărul de zile de la 30 decembrie 1899 (un număr negativ reprezintă o dată anterioară datei de 30/12/1899). Partea zecimală a numărului (dacă este prezentă) exprimă ora din zi ca parte

zi; 0 este miezul nopții și 0,5 este amiază. În VBA, conversia tipurilor de date numerice în tipuri Data este pur și simplu inversul conversiei de tip Dataîn număr.

Operator de atribuire (=)

Acest operator este folosit pentru a atribui rezultatul unei expresii unei variabile. Sintaxa formei operatorului de atribuire este următoarea:

varname = expresie

variabil varname - orice variabilă, a expresie - orice expresie.

Când executați un operator de atribuire, VBA evaluează mai întâi expresia din dreapta operatorului de atribuire (=) și apoi stochează rezultatul expresiei în variabila al cărei nume se află în stânga operatorului de atribuire.

Ilustrație a operatorului de atribuire într-o diagramă bloc:

varname = expresie

Când atribuiți rezultatul unei expresii unei variabile cu un anumit tip de date, acel rezultat poate fi de un tip de date care este compatibil cu tipul variabilei care primește noua valoare. În multe cazuri, VBA poate converti tipul de date al rezultatului unei expresii într-un tip compatibil cu tipul variabilei care primește noua valoare dacă rezultatul expresiei și variabilei nu au deja tipuri compatibile. Tip variabil Variantă poate fi atribuit orice tip de date.

Operatii aritmetice

VBA poate efectua toate operațiile aritmetice obișnuite (implementate prin expresii aritmetice): adunarea, scăderea, înmulțirea și împărțirea, precum și creșterea numerelor la o putere specificată și oferă operații matematice speciale suplimentare pentru împărțirea întregului și împărțirea modulo (Tabelul 11).

Tabelul 11- Semne de operație (notații) utilizate în expresiile aritmetice VBA (Ni este orice expresie numerică VBA validă)

Semn

Sintaxă

Nume/Descriere

Plus. Adaugă N1 la N2

Scădere. Scade N2 din N1

Multiplicare.Înmulțiți N1 cu N2

Divizia.Împarte N1 la N2.

Diviziune intregi.Împarte N1 la N2, eliminând orice parte fracțională, astfel încât rezultatul să fie un întreg.

Diviziune Modulo.Împarte N1 la N2, returnând doar restul operației de împărțire.

Exponentiație. Ridica N1 la puterea N2.

Ambii operanzi trebuie să fie expresii numerice sau șiruri de caractere pe care VBA le poate converti într-un număr.

Operații de comparare

Operațiunile de comparație sunt uneori numite și operații relaționale(relaționale operatori). Cel mai adesea, operațiunile de comparație sunt folosite pentru a stabili criterii de luare a unei decizii sau pentru a formula o descriere a condițiilor în care un grup de comenzi ar trebui repetat (organizarea ciclului).

Rezultatul oricărei operațiuni de comparare este o valoare de tip boolean: Adevărat sau Fals. Operatorii de comparație sunt utilizați pentru a compara valori literale, constante sau variabile de orice tip similar (Tabelul 12).

Nume/descriere

Egalitate. Adevărat , DacăEleste egal cu E2, în caz contrar –Fals

Mai puțin decât. Adevărat , DacăElmai puțin de E2, în caz contrar –Fals

Mai mic sau egal cu.Adevărat, dacă E1 este mai mic sau egal

E2, altfel –Fals

Mai mult decât. Adevărat , dacă E1 este mai mare decât E2, în caz contrar –Fals

Mai mare sau egal cu.Adevărat, dacă E1 este mai mare sau egal cu

E2, altfel –Fals

Nu este egal.Adevărat, dacă E1 nu este egal cu E2, în caz contrar – Fals

Obiect. Adevărat, dacă El se referă la același obiect ca E2, altfel –Fals Similitudine. Ambii operanzi trebuie să fie valori de tip

Tabelul 12– Simboluri de comparație (E în acest tabel reprezintă orice expresie VBA validă)

Operațiune/Operator

Sintaxă

f

exemplu,

Şir. Adevărat, dacă El se potrivește

Comparație binar și șir de text

VBA oferă două moduri diferite de a compara caracterele din cazuri diferite. Prima metodă pe care o folosește VBA pentru a compara șirurile este numită binar (binar) sau comparație binară și este metoda de comparare implicită. Pentru a selecta metoda de comparare a șirurilor VBA (binară sau text), utilizați directiva OpțiuneComparaţie:

Opțiune Comparare [ Binar | Text]

În comparație cu text, VBA „tratează” literele mari ca echivalente cu literele mici.

Concatenarea șirurilor

VBA oferă capacitatea de a concatena (lipi) șiruri împreună pentru a forma șiruri mai lungi. Adăugarea unui șir la altul se numește concatenare(concatenare) linii. Semnul & poate fi folosit doar pentru a concatena șiruri. Sintaxa generală pentru semnul & este:

Operand1 & Operand2 [& Operand3… ]

Operand1 Și Operand2 – orice șir sau expresii numerice valide. Dacă unul sau ambii operanzi sunt expresii numerice, VBA convertește numerele în șiruri de caractere înainte de a efectua operația de concatenare. Tipul de date al rezultatului concatenării șirurilor este întotdeauna tipul Şir.

Operatori logici

Cele mai frecvente utilizări ale operatorilor logici VBA sunt combinarea rezultatelor expresiilor de comparație individuale pentru a crea criterii de decizie complexe într-o procedură sau pentru a crea condiții în care un grup de instrucțiuni trebuie repetat (Tabelul 13).

Tabelul 13– Operatori logici (E în acest tabel reprezintă orice expresie validă cu un rezultat boolean, cum ar fi un operator de comparație)

Sintaxă operator Nume/Descriere

Și El și E2 Conjuncție. Adevărat, dacă atât E1 cât și E2 sunt semnificative

Adevărat , in caz contrar -Fals Sau El sau E2 Disjuncția. Adevărat, dacă o expresie sau ambele (E1 și

E2) sunt egaleAdevărat ; in caz contrar -Fals Nu, nu El Negare. Adevărat, dacă E1 are o valoare Fals; Fals,

DacăEleste egalAdevărat

Excepție. Adevărat, dacă E1 și E2 au diferite

valori; in caz contrar -Fals

Echivalenţă. Adevărat, dacă E1 are același

însemnând la fel ca E2; in caz contrar -Fals

Implicare. Fals, când E1 este egal AdevăratȘi

E2 este egal cuFals ; in caz contrar -Adevărat .

Priorități operaționale la evaluarea expresiilor complexe

Complex(compozit) expresie(complex expresie) este orice expresie formată din două sau mai multe expresii. Multe dintre expresiile pe care le scrieți sunt expresii complexe, mai ales dacă controlează ordonarea codului în proceduri sau reprezintă diverse formule matematice (Tabelul 14).

Tabelul 14– Ierarhia declarațiilor/operațiilor de la cea mai mare la cea mai mică prioritate

Operator/semn Comentarii

Exponentiație, cea mai mare prioritate

Minus unar

Înmulțirea și împărțirea au prioritate egală; sunt evaluate așa cum apar în expresia de la stânga la dreapta

Adunarea și scăderea au prioritate egală; sunt evaluate așa cum apar în expresia de la stânga la dreapta

Toate concatenarea șirurilor se efectuează după oricare operatii aritmeticeîntr-o expresie şi înaintea oricărei comparaţii sau operaţii logice

<, <=, >, >=,

Ca, =,<>, Este

Toți operatorii de comparație au prioritate egală și sunt evaluați așa cum apar în expresia de la stânga la dreapta. Utilizați paranteze pentru a grupa operatorii de comparare în expresii

Utilizarea FuncțiilorVisual Basic

Ați folosit deja funcțiile VBA încorporate: InputBoxȘi MsgBox. Funcţie(funcţie) este o formulă încorporată care efectuează operații asupra expresiilor și generează o valoare. O funcție returnează întotdeauna o valoare, pe care VBA o inserează în programul în care apare numele funcției. Funcțiile VBA sunt împărțite în mai multe grupuri în funcție de tipul de operație sau de calcul pe care îl efectuează. Nu confundați termenii funcţieȘi procedură. De obicei, o procedură realizează o anumită sarcină (sau un grup de sarcini), la fel ca o comandă de meniu specifică în Excel, Word sau o altă aplicație realizează o anumită sarcină. O funcție operează pe una sau mai multe valori și returnează o valoare rezultată (cum ar fi o formulă într-o celulă dintr-o foaie de lucru Excel). Pentru a utiliza o funcție, introduceți pur și simplu numele funcției într-o instrucțiune VBA împreună cu orice argument pe care funcția le solicită în punctul din declarație în care trebuie să utilizați rezultatul funcției. Plasarea numelui unei funcții într-o instrucțiune VBA pentru a invoca funcția este apelată provocare(chemând) funcții.

Funcțiile încorporate VBA sunt împărțite în mai multe categorii în funcție de scopul general al funcțiilor (matematice, conversie de date, dată și oră, șir și manipulare disc).

Funcții matematice

VBA oferă un set standard de funcții matematice (Tabelul 15). Tabelul 15– Funcții matematice VBA (N înseamnă orice expresie numerică)

Returnări/Acțiune

Funcții (ar-

gingii)

Returnează valoarea absolutăN

Abs(N)

Cosinusul unghiuluiN, UndeN

Cos(N)

Returnează sinusul unui unghi;Neste unghiul măsurat în radiani

Păcat(N)

bronzat(N)

Returnează tangenta unui unghi;N– unghi în radiani

Atn(N)

Returnează arctangentaNca unghi în radiani

Returnează o constantă e, ridicat la puterea N ( e este baza logaritmilor naturali și este (aproximativ) este egal cu 2,718282)

Returnează partea întreagă a lui N. Fix nu rotunjește numărul, dar elimină orice parte fracțională. Dacă N este negativ, Fix returnează cel mai apropiat număr întreg negativ mai mare sau egal cuN

Buturuga(N)

Returnează partea întreagă a lui N. Int nu rotunjește numărul, dar elimină orice parte fracțională. Dacă N este negativ, Int returnează cel mai apropiat număr întreg negativ mai mic sau egal cuNReturnează logaritmul naturalN

Aleatoriu

argument

este

Se intoarce

opțional. Utilizați funcția Rnd numai după

Inițializarea generatorului VBA numere aleatorii operator

Randomizați

Returnează semnul numărului: –1 dacă N este negativ; 1 dacă N –

pozitiv; 0 dacăNeste egal cu 0

Returnează rădăcina pătrată a lui N. VBA afișează o eroare

timpul de executare, dacăN– negativ

Funcții de conversie a datelor

Visual Basic oferă mai multe funcții pentru conversia unui tip de date în altul (Tabelul 16). Utilizați aceste funcții pentru a rezolva erorile de nepotrivire de tip și pentru a oferi control explicit asupra tipurilor de date din expresii.

Tabelul 16– Funcții de conversie a datelor (N este orice numeric, S este orice șir și E este o expresie de orice tip)

Funcție (ar- Returnări/Acțiunegingii)

Returnează numărul codului caracterului corespunzător primei litere liniiS. Litera „A”, de exemplu, are un cod de caractere de 65

Funcție (argumente)

Returnări/Acțiune

Returnează un șir de un caracter corespunzător codului de caractere N, care trebuie să fie un număr între 0 și 255, inclusiv. Codul caracterului 65, de exemplu, returnează litera „A” (Chr(13) este un caracter de returnare a căruciorului, Chr(10) este un caracter offset de o linie)

Returnează un șir care conține valoarea reprezentată de expresia E, formatată conform instrucțiunilor conținute în S

Returnează un șir care conține reprezentarea hexazecimală a lui N

Oct(N) Returnează un șir care conține reprezentarea octală a lui N

Returnează un întreg de tip Lung, reprezentând valoarea culorilor primare ale imaginii. N din fiecare argument trebuie să fie un număr întreg în intervalul 0 – 255, inclusiv. Argumentele (de la stânga la dreapta) sunt valorile pentru roșu, verde și de culoare albastră

Str(N) Returnează un șir echivalent cu expresia numerică N

Returnează o valoare numerică corespunzătoare numărului reprezentat de șirul S, care trebuie să conțină doar cifre și un punct zecimal, altfel VBA nu o poate converti într-un număr. Dacă VBA nu poate converti șirul în S, atunci funcția Val returnează 0

CBool(N) Returnează echivalentul boolean al expresiei numerice N

octet(de la 0 la 255); E – orice expresie numerică sau șir validă care poate fi convertită într-un număr

Returnează o valoare numerică de tip Valută

Returnează o valoare de tip Data. E poate fi orice expresie validă (șir sau număr) reprezentând o dată din interval 1/1/100 12/31/9999 , inclusiv

Returnează o valoare numerică de tip Dubla, care poate fi convertit într-un număr

Returnează o valoare numerică de tip Întreg; E – orice expresie numerică sau șir validă care poate fi convertită într-un număr

Returnează o valoare numerică de tip Lung; E – orice expresie numerică sau șir validă care poate fi convertită într-un număr

Funcție (argumente)

Returnări/Acțiune

Returnează o valoare numerică de tip Singur; E – orice expresie numerică sau șir validă care poate fi convertită într-un număr

Returnează o valoare de tip Şir; E – orice expresie numerică sau șir validă

Returnează o valoare de tip Variantă; E – orice expresie numerică sau șir validă

Funcții de dată și oră

Funcțiile de dată și oră VBA sunt utilizate de obicei pentru a obține data și ora curente, pentru a împărți o valoare a datei în părțile sale componente sau pentru a converti șiruri și numere în valori precum Data(Tabelul 17).

Tabelul 17– Funcții de dată și oră (N este orice expresie numerică validă, iar D este orice expresie validă ca Data(inclusiv valori precum Data, numere sau șiruri de caractere pe care VBA le poate converti într-o dată); toate argumentele funcției sunt necesare dacă nu este menționat altfel)

Returnări/Acțiune

Funcții (ar-

gingii)

Returnează data sistemului. De asemenea, puteți utiliza această funcție ca procedură pentru a seta ceasul de sistem al computerului. Mai multe detalii pot fi găsite în cartea de referință. sistemeVBA

Returnează ora de sistem a computerului ca valoare de tip Data. De asemenea, puteți utiliza această funcție ca procedură pentru a seta ceasul sistemului. Mai multe detalii pot fi găsite din sistemul de ajutorVBAReturnează data și ora sistemului

DataȘi

Returnează un număr întreg care face parte dintr-o expresie de tip Data,

inclusiv

Returnează un număr întreg care face parte dintr-o expresie de tip DataȘi

Ziua săptămânii(D) Ora(D)

inclusiv

Returnează un număr întreg care conține ziua săptămânii pentru o expresie de tip

Data. Ziua săptămânii este returnată ca număr între 1 și 7,

inclusiv; 1 este duminică, 2 este luni și așa mai departe

Returnează un număr întreg care conține orele ca parte a timpului,

un număr între 0 și 23, inclusiv. Dacă expresia D nu este

conţine valori de timp, atunciOrareturneaza 0

Funcții (ar-gingii)

DataAdd(S, N, D)

DataSerial(N, N, N)

TimeSerial (N, N, N)

Returnări/Acțiune

Returnează un număr întreg care conține minute ca parte a timpului în

tipul expresiei Data. Minutele sunt returnate ca un număr între 0

și 59, inclusiv. Dacă expresia D nu conține o valoare

timp,Minutreturneaza 0

Returnează un număr întreg care conține secunde ca parte a timpului în

tipul expresiei Data. Secundele sunt returnate ca un număr între

0 și 59, inclusiv. Dacă expresia D nu conține o valoare

timp,Al doileareturneaza 0

Returnează valoarea [tip Variantă(Data)], conținând data până la

DateDiff(S, D1, Returnează valoarea [tip Variantă(Lung)] număr de temporare D2[,Nl [, N2 ]]) intervale dintre două date specifice DatePart(S, D, [, Returnează partea specificată [tip Variantă(Întreg)] N1 [, N2]]) data dată

la care se adaugă un interval de timp specificat

Returnează valoarea secvenţială a datei pentru data dată. De la stânga la dreapta, argumentele reprezintă anul, luna și ziua. Argumentul an trebuie să fie un număr întreg între 100 și 9999, luna trebuie să fie între 1 și 12, ziua trebuie să fie între 1 și 31 (toate intervalele sunt inclusive)

Returnează valoarea timpului serial. De la stânga la dreapta, argumentele reprezintă ore, minute și secunde. Argumentul ore trebuie să fie un număr întreg între 0 și 23, argumente minutele și secundele trebuie să fie ambele numere de la 0 la 59 Returnează o valoare de tip Data, echivalent cu data specificată de argumentul E, care trebuie să fie un șir, un număr sau o constantă reprezentând o dată

miezul nopții în funcție de ora sistemului informatic Unele funcțiile enumerate au fost deja folosite în exemplele din această carte, altele vor fi folosite mai târziu.

Funcții șiruri

Funcțiile șir VBA sunt adesea folosite pentru a găsi șiruri dateîn interiorul altor linii, pentru a compara o linie cu alta și a copia părți ale liniilor selectate (Tabelul 18).

Returnează o valoare de tip Data, care conține timpul specificat de argumentul E, care poate fi un șir, un număr sau constantă reprezentând timpul Returnează un număr care reprezintă numărul de secunde de la

Tabelul 18– Funcții șir (N este orice expresie numerică validă, iar S este orice expresie șir validă)

gumă)

Returnează poziția lui S2 în S1. N1 – pozitia de pornire Pentru

căutare; N2 determină tipul de comparație. N1 și N2 sunt opționale. Dacă N2 este omis, atunci cel curent este folosit pentru căutare instalareOpțiune Comparaţie InStrRev(Sl, S2 Returnează poziția în care șirul S2 apare în interiorul S1

[, Nl[, N2]]) LCaza(S)

Len(S) LTrim(S)

Spațiu (N) StrComp(Sl, S2, N)

în direcția de la sfârșitul (sau N1) la începutul liniei. N2 determină tipul de comparație. Dacă N2 este omis, atunci folosirea este utilizată pentru căutare instalatia curentaOpțiune Comparaţie

Returnează un șir (de tip Şir), care conține o copie a lui S cu toate caracterele majuscule convertite în caractere litere mici

Returnează un șir; copiază N caractere din S, începând din stânga ultimul personajS

Returnează numărul de caractere din S, inclusiv caracterele de început și de sfârșit spatii

din partea stângă a liniei (spatii de început) Returnează un șir; copiează N2 caractere din S, începând cu poziția caracterului din S specificată de N1. N2 este opțional; dacă N2 este omis, atunci Mid returnează totul caractere dintr-un șirSdin pozițieN1 până la sfârșitul rândului Returnează o valoare String; copiază N caractere din S,

pornind de la caracterul din dreaptaS

Returnează o copie a șirului S după ce caracterele spațiilor albe au fost eliminate

din partea dreaptă a șirului (caracterele de sfârșit)

Returnează un șir de spații de lungimeNpersonaje

Compară S1 cu S2 și returnează un număr care indică rezultatul comparației: -1 dacă SI< S2; 0, если SI = S2; 1, если SI >S2. N este opțional și specifică dacă comparația trebuie să țină cont de majuscule și minuscule. Dacă N este omis, șirurile sunt comparate folosind instalatia curenta OpțiuneComparaţie

Returnează un șir convertit în uniforma nouaîn funcție de codul numeric specificat de argumentul N, VBA oferă constante interne pentru utilizarea cu funcția StrConv; cele mai utile sunt: vbProperCase(convertește șirul astfel încât fiecare literă care începe un cuvânt să fie scrisă cu majuscule), vbLowerCase(conversează șirul în litere mici) și vbMajuscule(convertește șirul în litere mari)

Funcție (ar- Returnări/Acțiunegumă)

String(N, S) Returnează un șir de N caractere lung, format din caracter

specificat de primul caracter înS Trim(S) Returnează o copie a șirului S după eliminarea începutului și

caractere de spații albe din urmă din acest șir UCase(S) Returnează S cu toate caracterele minuscule,

convertit în caractere majuscule Mai multe enumerate în tabel. Cele 16 funcții de conversie a tipurilor de date se aplică și manipulării șirurilor: Chr, Format, CStr, în special.

Formatarea valorilor datelor

Deși VBA poate converti automat orice tip de date într-un șir pentru afișare folosind funcția MsgBox sau pentru inserarea într-o foaie de lucru Excel, formatul de date pe care VBA îl alege poate să nu fie cel pe care îl doriți. Când convertiți un număr într-un șir, VBA nu adaugă un separator de mii, semne de dolar sau alte formatări numerice la șir. În plus, dacă un număr este foarte mare sau foarte mic, VBA creează un șir reprezentând acel număr în notație științifică. La conversia datelor, VBA folosește întotdeauna formatul scurt de dată și oră utilizat de sistemul de operare al computerului și afișează întotdeauna atât data, cât și ora.

Pentru a obține aproape orice format de dată când convertiți numere sau date în șiruri, puteți utiliza funcția Format; poți chiar să folosești funcția Format pentru a formata datele șir în funcție de un model specific. De asemenea, puteți crea formate de ecran personalizate dacă aveți nevoie ca datele să apară într-un anumit format. Sintaxa operatorului de format:

Format( Expresie [, Format[, Prima zi a săptămânii [, Prima săptămână de an]]])

Expresie – orice expresie valabilă (obligatoriu); Format – o expresie validă a unui format numit sau definit de utilizator (opțional); Prima zi a săptămânii – o constantă care definește prima zi a săptămânii (opțional); Prima săptămână de an – o constantă care definește prima săptămână a anului (opțional).

Pentru argumente Prima zi a săptămânii Și Prima săptămână de an VBA are constante denumite, despre care puteți afla în Ajutorul VBA din Constante date.

Pentru a utiliza funcția Format, puteți fie să specificați un format predefinit (numit format numit(numit format), sau creați o imagine cu un anumit format folosind combinații ale unui grup special de caractere numit caractere substituent(substituenți). Dacă trebuie să creați formate personalizate pentru numere, date sau ore, trebuie să creați un șir care să conțină caractere substituent pentru a specifica formatarea pe care trebuie să o folosească funcția. Format la conversia valorilor într-un șir (Tabelul 19). În plus, în tabel. 19 folosit

de exemplu, valoarea numerică este 1234,5.

pentru a crea personalizate

Tabelul 19– Formatați caracterele de umplere

Caracter substituent

Acțiune

Un caracter numeric care afișează o cifră dacă una se află în acea poziție sau 0 dacă nu. Puteți folosi simbolul 0 pentru a afișa zerouri de început pentru numere întregi și zerouri de la urmă pentru zecimale; 00000.000 afișează 00124.500

Un simbol numeric afișează o cifră dacă există una în această poziție, altfel nu afișează nimic. Caracterul substituent # este echivalent cu 0, cu excepția faptului că zerourile de început și de final nu sunt afișate; #####.### afișează 1234.5

$ Afișează un semn dolar; $###,###.00 afișează 1.234,50 $

Caracter substituent zecimal, afișează punctul zecimal la poziția desemnată în șirul de caractere substituent 0; #.##.## afișează 1234.5

Simbol procent, înmulțește valoarea cu 100 și adaugă un semn de procent în poziția indicată de caracterele de umplere 0; #0.00% afișează numărul 0,12345 ca 12,35% (12,345 se rotunjește la 12,35)

, (virgulă)

Separator de mii, adaugă virgule ca separatori de mii în șiruri de caractere de umplere 0 și #; ###,###,###. 00 afișează 1.234,50

Afișează valorile în format exponențial cu semn de exponent numai pentru valorile negative; #.#### E00 afișează 1.2345E03; 0.12345 este afișat ca 1.2345E-01

Afișează valorile în format exponențial cu un exponent pentru valorile pozitive și negative; #.#### E+00 afișează 1.2345E+03

Separă ziua, luna și anul pentru formatarea valorilor datei. mm/ dd/ da afișează 06/06/97. Caracterele „/” pot fi înlocuite cu cratime pentru a fi afișate ca 06-06-97

Specifică modul de afișare a lunilor în date; m afiseaza 2, mm– 02, mmm– Februarie, mmmm- Februarie

Specifică modul de afișare a zilelor în date; d afiseaza 1, dd afișează 01, ddd– Vineri, dddd- Vineri

y Afișează ziua anului ca număr de la 1 la 366

Specifică modul de afișare a anilor în date; da afișează 99, Wow– 1999

Afișează trimestrul anului ca un număr de la 1 la 4

Afișează ziua săptămânii ca număr (1 este duminică)

Afișează săptămâna anului ca un număr de la 1 la 54

Caracter substituent

Acțiune

: (coloană) Separă ore, minute și secunde în valorile formatului de timp; hh: mm: ss afișează 02:02:02

Specifică modul de afișare a ceasului; pentru valoarea de timp 02:01:38 h afiseaza 2, hh afișează 02

Simbol substituent pentru minute pentru timp; pentru valoarea de timp 02:01:08 n afișează 1 și nn afișează 01

Simbol de substituent secunde pentru timp; pentru valoarea de timp 02:01:08 s afișează 8 și ss afiseaza 08

Afișează ora în format de 12 ore cu AM și PM adăugate; h: nnAM/RM afișează ora 16:00. Formatele alternative includ am/pm, A/P și a/p

Substituent de caractere, afișează un spațiu dacă nu există niciun caracter care se potrivește în șirul formatat (ordinea implicită de completare este de la dreapta la stânga)

Afișează toate caracterele cu majuscule

Afișează toate caracterele cu litere mici

Utilizarea funcțiilor aplicației gazdă

În plus față de funcțiile încorporate în Visual Basic pentru aplicații, unele funcții ale aplicației gazdă VBA sunt disponibile din codul VBA. Gazdă-aplicatie este o aplicație în care sunt dezvoltate proceduri VBA precum Word, Excel, PowerPoint, Outlook sau FrontPage. Excel, de exemplu, are diverse funcții care efectuează operații matematice, logice, financiare și statistice asupra datelor din foile de lucru. Multe (deși nu toate) dintre aceste funcții Excel sunt accesibile din codul VBA. Funcțiile aplicației gazdă disponibile pentru VBA nu fac parte din VBA, ele fac parte din aplicația gazdă. Este posibil ca funcțiile disponibile pentru VBA într-o aplicație gazdă să nu fie disponibile în alta.

Pentru a utiliza o funcție care aparține unei aplicații gazdă, accesați funcția printr-un obiect program Aplicație. Obiectul Application VBA reprezintă aplicația gazdă și toate resursele acesteia. Obiectele sunt descrise mai detaliat în partea 6.

Sarcina 6. Scrieți o procedură care folosește funcția Max din Excel.

Pentru aceasta:

Introduceți procedura (Listing 8):

Lista 8 – Utilizarea funcțiilor ExcelMax

1 Sub List3_08()

2 MsgBox Application.Max(9, 17, -18, 20)

În spatele Cuvântului Aplicație urmat de un punct (.) și apoi de numele funcției Max fara spatii. Acest punct, numit punct separator(punct separator), indică faptul că enunțul se referă la o funcție Max, care face parte din obiect

Aplicație.

Rezultatul funcției Excel nu poate fi ignorat. Ar trebui să includeți întotdeauna paranteze într-un apel de funcție Excel și ar trebui să utilizați întotdeauna rezultatul funcției într-un fel: ca valoare într-o expresie, un argument pentru o altă funcție sau procedură sau într-o instrucțiune de atribuire.

Nu toate funcțiile aplicației gazdă sunt disponibile pentru VBA. Dacă nu sunteți sigur dacă o anumită funcție de aplicație gazdă este disponibilă pentru VBA, utilizați Obiect Browser pentru a verifica dacă lista include Membrii (Componentă) această funcție, atunci când este selectată Funcție Fișă de lucru pe listă Clase (Clase) și cu aplicația gazdă selectată în listă Proiect/ Bibliotecă (Proiect/Bibliotecă). Dacă funcția necesară nu este în listă, atunci nu este disponibilă pentru VBA.

Întrebări de control

    Definiți conceptul de „tipuri de date”. Ce tipuri de date sunt folosite în VBA?

    Ce este un ID?

    Ce este o variabilă? Ce înseamnă expresia „definiți o variabilă implicit” și ce înseamnă „explicit”?

    Ce constante sunt folosite în VBA? Ce sunt constantele interne?

    Pentru ce sunt folosite funcțiile InputBox și MsgBox?

    Ce este o expresie?

    Definiți sintaxa operatorului de atribuire.

    Ce sunt operațiunile relaționale?

    Care este prioritatea operațiilor matematice?

    Ce cuvânt cheie există în VBA care trebuie utilizat la accesare Funcții Excel? Pentru ce poți folosi fereastra Object Browser?

Variabile VBA, Declarație de variabilă, Opțiune explicită, Reguli de denumire, Tipuri de date VBA, Valori inițiale ale variabilelor

Variabile- containere pentru stocarea datelor modificabile. Aproape niciun program nu se poate descurca fără ele. Pentru simplitate, o variabilă poate fi comparată cu un număr dintr-o garderobă - trimiteți câteva date în „dulap”, iar ca răspuns vi se dă un număr. Când aveți nevoie din nou de aceste date, „prezentați numărul” și îl primiți. Un exemplu de lucru cu variabile în VBA ar putea arăta astfel:

Dim nMyAge ca număr întreg

nMyAge = nMyAge + 10

MsgBox nMyAge

Dim nMyAge ca număr întreg

Cum să decriptezi acest șir:

Dim- acesta este domeniul de aplicare al variabilei. VBA oferă 4 cuvinte cheie pentru a defini domeniul de aplicare al variabilelor:

  • Dim- folosit în majoritatea cazurilor. Dacă o variabilă este declarată ca Dim în zona de declarare a unui modul, ea va fi disponibilă în întregul modul, dacă într-o procedură, va fi disponibilă numai în timpul rulării acestei proceduri;
  • Privat- la declararea variabilelor în VBA, înseamnă la fel ca Dim;
  • Public- o astfel de variabilă va fi disponibilă pentru toate procedurile din toate modulele unui proiect dat dacă ați declarat-o în zona de declarare a modulului. Dacă ați declarat-o în cadrul unei proceduri, se va comporta ca Dim/Private;
  • Static- astfel de variabile pot fi utilizate numai în cadrul unei proceduri. Aceste variabile sunt vizibile doar în cadrul procedurii în care sunt declarate, dar își păstrează valoarea între provocări diferite această procedură. De obicei folosit pentru a acumula orice valori. De exemplu:

Static nVar1 ca întreg

nVar1 = nVar1 + 1

MsgBox nVar1

Dacă nu există cerințe speciale, atunci este logic să selectați întotdeauna domeniul Dim.

Al doilea cuvânt din declarația noastră (nMyAge) este identificatorul (cu alte cuvinte, numele) variabilei. Regulile de alegere a numelor în VBA sunt aceleași pentru multe elemente (variabile, constante, funcții și proceduri etc.). Nume:

  • trebuie să înceapă cu o scrisoare;
  • nu trebuie să conțină spații sau simboluri de punctuație (excepția este liniuța de subliniere);
  • lungime maxima- 255 caractere;
  • trebuie să fie unic în domeniul actual (mai multe detalii mai jos);
  • cuvintele rezervate (cele care sunt evidențiate într-o culoare diferită în fereastra editorului de cod) nu pot fi utilizate.

În timp ce creați programe VBA Este foarte recomandat să decideți asupra regulilor prin care numele vor fi atribuite obiectelor - o convenție de denumire. Cel mai des folosit este așa-numitul acord maghiar (în cinstea unuia dintre programatorii Microsoft, Charles Simonyi, un maghiar de naționalitate):

  • numele variabilei trebuie să înceapă cu prefixul scris litere mici. Prefixul indică exact ce va fi stocat în această variabilă:
    • str (sau s) - String, valoarea caracterului;
    • fn (sau f) - funcție;
    • c (sau faceți toate literele majuscule) - constantă;
    • b - valoare booleană, logică (adevărat sau fals);
    • d - data;
    • obj (sau o) - referință la obiect;
    • n - valoare numerică.
  • numele de funcții, metode și fiecare cuvânt dintr-un cuvânt compus trebuie să înceapă cu o literă mare:

MsgBox objMyDocument.Name

Sub CheckDateSub()

  • V versiuni anterioare VB nu avea cuvântul Const - toate constantele erau definite ca variabile, iar pentru a le distinge erau scrise cu majuscule, cu subliniere plasate între cuvinte:

NUMELE COMPANIEI

Mulți programatori încă folosesc această abordare pentru a desemna constante (dar utilizarea cuvântului cheie Const este acum obligatorie - acest lucru va fi discutat în secțiunea următoare).

A treia parte a anunțului nostru - Ca întreg- aceasta este o indicație a tipului de date al variabilei noastre. Tipul de date determină ce tip de date pot fi stocate în variabila noastră.

VBA oferă următoarele tipuri de date:

  • numeric(octet - un număr întreg de la 0 la 255, întreg - un număr întreg de la -32768 la 32767, lung - un număr întreg mare, monedă (un număr zecimal mare cu 19 poziții, inclusiv 4 zecimale), zecimală (un număr zecimal și mai mare cu 29 de poziții), simplu și dublu - valoare în virgulă mobilă (dublu este de două ori mai mare));

Atenţie! Încercarea de a declara o variabilă de tip Decimal (de exemplu, Dim n As Decimal) va avea ca rezultat o eroare de sintaxă. Pentru a putea funcționa cu tipul Decimal, variabila trebuie inițial declarată ca Variant sau declarată fără tip (Dim n), deoarece tipul de date Variant este utilizat implicit în VBA.

  • şir(lungime variabilă a șirului (până la aproximativ 2 miliarde de caractere) și lungime fixă ​​(până la aproximativ 65400 de caractere);
  • data si ora(data - de la 01.01.100 la 31.12.9999);
  • logic(boolean - poate stoca doar valorile True și False);
  • obiect(obiect - stochează o referință la orice obiect în memorie);
  • Variantă- un tip de date special care poate stoca orice alte tipuri de date.

De asemenea, puteți utiliza tipuri de date personalizate, dar acestea trebuie mai întâi definite folosind o expresie Type. De obicei, tipurile de date personalizate sunt utilizate ca remediu suplimentar validarea valorilor introduse de utilizator (un exemplu clasic este codul poștal).

Câteva puncte legate de alegerea tipurilor de date pentru variabile:

  • principiu general- alegeți cel mai mic tip de date care poate găzdui valorile pe care le selectați. Dacă există vreo îndoială, alegeți un tip de date mai mare pentru a evita erorile;
  • Dacă este posibil, este mai bine să nu utilizați tipuri de date în virgulă mobilă (single și duble). Lucrul cu aceste tipuri de date este mai lentă și pot apărea probleme cu comparațiile din cauza rotunjirii;
  • Dacă este posibil, este mai bine să nu utilizați tipul Variant. Acest tip este încă transmis de VBA la unul dintre celelalte tipuri, dar necesită mai multă memorie. Mai mult, pot apărea erori în timpul unei astfel de formări implicite;
  • Când definiți variabile, puteți utiliza așa-numitele simboluri de definire a tipului (% - întreg, $ - șir etc.). De exemplu, în exemplul nostru, trebuie să comentați linia Dim nVar 1 As Integer, iar pe a doua linie scrieți:

nVar1% = nVar1% + 1

Această abordare este depășită și nu este recomandată pentru utilizare.

Când declarați variabile, nu trebuie să specificați tipul acestora. De exemplu, anunțul nostru ar putea arăta astfel:

DimnVar1

În acest caz, variabila va fi declarată automat ca o Variantă.

În principiu, puteți lucra în VBA fără a declara variabile. De exemplu, acest cod

nVar1 = nVar1 + 1

MsgBox nVar1

va fi pe deplin funcțional. Dacă folosim o variabilă într-un program fără a o declara, va fi creată automat o nouă variabilă de tip Variant. Cu toate acestea, trebuie să declarați variabile! Și, în același timp, este recomandabil să indicați în mod explicit tipul de date necesar. De ce:

  • numărul erorilor este redus: programul de la bun început va refuza să accepte valoare variabilă tip incorect (de exemplu, șir în loc de numeric);
  • Când lucrați cu obiecte, un indiciu despre proprietăți și metode este valabil doar atunci când am declarat inițial o variabilă obiect cu tipul dorit. De exemplu, în Excel, două versiuni ale codului vor funcționa la fel:

prima varianta:

Dim oWbk ca registru de lucru

Set oWbk = Workbooks.Add()

a doua varianta:

Set oWbk = Workbooks.Add()

Dar un indiciu despre proprietățile și metodele obiectului oWbk va funcționa doar în al doilea caz.

Toți dezvoltatorii experimentați interzic, în general, utilizarea variabilelor fără declarația lor explicită. Pentru aceasta puteți folosi echipa speciala compilator (este plasat doar în secțiunea de declarare a modulului)

Opțiunea explicită

Sau puteți introduce această comandă în toate modulele când le creați automat - bifând caseta din fereastra editorului de cod Necesită declarații variabile(meniul Instrumente -> Opțiuni, fila Editor).

Un exemplu simplu poate ilustra de ce fac acest lucru:

n = n + 1

MsgBox

În aparență, codul nu ar trebui să provoace probleme și pur și simplu să afișeze unul în fereastra de mesaje. De fapt, va afișa o casetă de mesaj goală. Motivul este ascuns foarte insidios: în a treia linie n nu este deloc scrisoare engleză N și rusă P. Este foarte dificil să le distingem în fereastra editorului de cod. În același timp, compilatorul VBA, întâlnind un astfel de cod, va crea pur și simplu o nouă variabilă cu tipul de date Variant, care va avea o valoare goală. Poate dura ceva timp pentru a identifica o astfel de eroare.

Bună regulă- declarați variabilele în prealabil, și nu atunci când sunt necesare. Acest lucru face ca programul să fie mai lizibil și mai clar planificat.

Puteți declara mai multe variabile pe o singură linie, astfel:

Dim n1 ca întreg, s1 ca șir

Atribuirea de valori variabilelor arată astfel:

nVar1 = 30

Dacă trebuie să măriți o valoare deja existentă a unei variabile, comanda ar putea arăta astfel:

nVar1 = nVar1 + 1

În ambele exemple, semnul egal nu înseamnă „egal”, ci a atribui.

Când atribuiți valori variabilelor, țineți cont de următoarele:

  • valorile șirurilor sunt întotdeauna cuprinse între ghilimele duble:

sVar1 = „Bună ziua”;

  • valorile datei/ora sunt incluse în semne hash - simboluri lire:

dVar1 = #05/06/2004#

Vă rugăm să rețineți că atunci când atribuim o valoare de dată/ora în acest mod „explicit”, va trebui să folosim standardele SUA: 05 în acest caz este luna, 06 este ziua. Afișarea acestei valori (de exemplu, într-o fereastră de mesaj) va depinde de setari regionale pe computerul utilizatorului.

Dacă trebuie să transferați valoare hexazecimală, apoi simbolurile &H sunt plasate în fața acestuia:

nVar1 = &HFF00

Ce conțin variabilele înainte de a li se atribui valori?

  • În toate variabilele tipuri numerice date - 0.
  • În variabilele șirului de lungime variabilă - "" (șir de lungime zero).
  • În variabilele șir de lungime fixă, un șir de o lungime dată cu caractere ASCII 0 (aceste caractere nu sunt afișate pe ecran).
  • În Variant - valoare goală.
  • În Object - nimic (nu există nicio referire la niciunul dintre obiecte).

Cuvântul englezesc DIMENSION, de la care este luată abrevierea DIM, înseamnă „dimensiune”, „dimensiune”. Acest operator este necesar pentru a clarifica și a defini variabilele cu care funcționează programul. Faptul este că implicit (așa-numitul implicit, care este slab asociat cu data de 19 august 1998), QB utilizează variabile obișnuite cu precizie unică. Dacă, să zicem, avem nevoie de variabile cu un singur parametru A(I), atunci el ne va oferi aproximativ 10-12 dintre ele și apoi va anunța depășirea. În general, operatorul DIM este folosit pentru a declara matrice (mai multe despre asta mai târziu) sau pentru a determina tipul de date al unei variabile non-matrice. A doua declarație REDIM care poate fi luată în considerare vedere suplimentară Operatorul DIM, declară parametrii sau transformă parametrii matricelor dinamice, eliminând restricțiile anterioare. Formatul declarațiilor este:

Variabila DIM[(indice)]

[,variabilă[(indice)] ]...

variabilă REDIM (indice)

[,variabilă(indice) ]...

Să facem câteva comentarii. Aici

SHARED indică faptul că variabilele scrise în spatele lui sunt, de asemenea, partajate cu toate subrutinele sau procedurile funcției din modulul creat și executabil.

variabilă este numele unei variabile sau al unui tablou.

dimensiunile matricei de indice specificate în formatul:

[lower TO] upper [,[lower TO] upper]...

Parametru inferior setată pentru a indica limita inferioară a indexului matricei. Valoarea implicită este zero. Superior indică limita superioară pentru un index de matrice dat.

Tipul AS declară tipul de date al unei matrice sau variabile (INTEGER, LONG, SINGLE, DOUBLE, STRING sau un tip de date definit de utilizator).

Declarația DIM declară și natura (statică sau dinamică) a matricei. Cu excepția cazului în care metoda de stocare a matricei este specificată în mod explicit ca $STATIC, $DYNAMIC sau COMMON, matricele cu cifre în loc de indice sunt statice, iar matricele DIM cu variabile caractere sunt dinamice. Instrucțiunea REDIM declară întotdeauna matrice dinamice. Modul tablouri statice declarat automat când programul începe și rămâne așa. Matricele dinamice sunt stocate în memoria mașinii în timpul execuției programului.

Să revenim la programul care calculează factorialul. Să adăugăm următoarele rânduri:

dim fkt ca dublu

dacă eu<25 then goto 20

imprimați i;“! = ”fkt

Acum, pentru a forța programul să „oprească” de la depășire, trebuie să luați un număr foarte mare, de exemplu 171.

Inca o completare. Pentru a economisi memoria mașinii, ei folosesc adesea această caracteristică încorporată în QB, cum ar fi adăugarea unui semn % (procent) la nume numeric variabilă astfel încât să fie declarată în program ca număr întreg. Astfel, programul nostru final, ținând cont de acest mod de a descrie variabilele întregi, va arăta astfel:

dim fkt ca dublu

dacă eu%<25 then goto 20

imprimați i%;“! = ”fkt

Rețineți că buclele sunt foarte importante în scrierea programelor fără ele este imposibil să introduceți și să citiți matrice de date, să calculați multe funcții, să introduceți liste etc. Importanța buclelor la scrierea programelor este cea care poate explica faptul că aproape toate limbile au operatori speciali pentru organizarea buclelor. În QB un astfel de operator arată

operator DIM

Dacă într-o sarcină datele procesate sunt organizate sub formă de matrice, atunci interpretul trebuie să furnizeze informațiile necesare pentru a aloca memorie pentru matricele utilizate în program. Operatorul DIM este utilizat pentru aceasta.

Format: DIM a1(m1), a2(m2),..., aN (mN)

ai - nume de matrice;

mi este o listă de parametri care specifică valorile maxime ale indicilor matricei. Lista mi poate conține una sau două constante întregi sau variabile separate prin cincimi, precum și expresii aritmetice. Indicii variază de la 0 la maxim.

Exemplu: DIM A(4), B(5,8), A1$(5), B1$(3,4)

Operatorul DIM descrie matricele numerice A și B și matricele de caractere A1$ și B1$. Matricea A este unidimensională și conține 5 elemente A(0), A(1), A(2), A(3), A(4). Matricea numerică bidimensională B conține 6 rânduri și 9 coloane. Tabloul unidimensional de caractere A1$ este format din 6 elemente. Tabloul bidimensional de caractere B1$ este format din 20 de elemente (4 rânduri, 5 coloane).

Prelucrarea matricei în limbajul BASIC se realizează element cu element. Instrucțiunea DIM care descrie o matrice trebuie plasată în program înaintea primei instrucțiuni care își folosește elementele.

Dacă o matrice unidimensională nu are mai mult de 11 elemente, iar o matrice bidimensională nu are mai mult de 11 rânduri și 11 coloane, atunci astfel de matrice nu trebuie descrise.

Numele de variabile pot fi folosite ca indici maximi. Dar valorile variabilelor trebuie atribuite înainte de instrucțiunea DIM.

Exemplul 1: Exemplul 2:

10 INTRARE N,K 10 INTRARE N,M

20 DIM A(N),B(K,N) 20 DIM A(N+1,M)

Exemplul 3: date matrice unidimensionale A și B, fiecare conținând N elemente. Generați o nouă matrice D, fiecare element fiind determinat de formulă

D(i)=A(i)+B(i)+C(i), i=1,2,.....,N

10 INTRARE „Introduceți dimensiunea matricelor” ;N

20 DIM A(N),B(N),C(N),D(N)

40 INTRARE A(I),B(I),C(I)

70 D(I)=A(I)+B(I)+C(I)

80 PRINT "D(";I;")=";D(I);

Blocuri de date

a) operator DATE

Operatorul DATA este conceput pentru a crea un bloc de date.

Format: DATE A

DATE - cuvânt cheie;

A este o listă care conține una sau mai multe constante reale, întregi sau șir, separate prin virgule (constantele șirului nu trebuie să fie incluse între ghilimele).

Operatorul DATA creează un bloc de date în memoria RAM a computerului. Informațiile sunt scrise în blocul de date în ordinea în care apar în listă. Dacă un program folosește mai multe instrucțiuni DATA, un bloc de date este format prin concatenarea secvențială a valorilor din liste, în ordinea în care apar instrucțiunile.

Exemplu: 20 DATE 2, 5.6, program

........................

50 DATE 8, exemplu, 37.6, 5

Blocul de date va avea 7 elemente: 2, 5.6, program, 8, exemplu, 37.6, 5

B) CITIȚI declarația

Instrucțiunea READ este utilizată pentru a citi informații dintr-un bloc de date.

Format: CITEȘTE V

CITEȘTE - cuvânt cheie;

V este o listă separată prin virgulă cu unul sau mai multe nume de variabile.

Blocul de date este organizat astfel încât să ofere acces secvenţial la informaţiile stocate în el folosind un pointer intern. Poziția curentă a indicatorului indică un element al blocului de date care este imediat disponibil pentru citire. Când programul începe, indicatorul este setat la elementul de pornire al blocului. Când instrucțiunea READ este executată, primul element al blocului de date din lista instrucțiunii DATA este atribuit ca valoare a variabilei al cărei nume se află primul în lista instrucțiunii READ, iar pointerul este mutat la următoarea poziție și acum indică al doilea element al blocului de date. Dacă există un alt nume de variabilă în lista instrucțiunii READ, atunci al doilea element îi va fi atribuit ca valoare. Indicatorul este apoi mutat în următoarea poziție și procesul se repetă până când lista instrucțiunii READ se termină.

La sfârșitul listei, indicatorul va fi setat la elementul bloc de date după ultima valoare citită. Dacă în program se întâlnește o altă instrucțiune READ, atunci alocarea elementelor din blocul de date la variabile din lista instrucțiunii READ se va efectua pornind de la poziția curentă a pointerului.

Exemplu: 30 CITEȘTE A, B

100 CITEȘTE E$, F, G

A = 2 B = 5,6 C = „program”

D = 8 E = „exemplu” F = 37,6 G = 5

DATA este singurul operator BASIC al cărui număr de linie nu afectează ordinea acțiunilor efectuate. Numărul liniei este necesar doar pentru a menține formatul general al programului.

Doar instrucțiunea READ determină când și ce date trebuie citite.

c) operator RESTORE

Pentru a returna un pointer la începutul unui bloc de date, utilizați instrucțiunea RESTORE.

Format: RESTORE sau RESTORE N

N este numărul liniei care conține instrucțiunea DATA.

Utilizarea acestui operator permite ca aceleași date să fie citite în mod repetat de diferite instrucțiuni DATA și atribuite ca valori diferitelor variabile.

40 DATE 2, 4, 8, 3, -6, 4

A = 2, A1 = 4, A2 = 8, indicatorul către numărul 3, dar RESTORE îl întoarce la primul număr, deci B = 2, B1 = 4.

Dacă specificați numărul liniei care conține instrucțiunea DATA în instrucțiunea RESTORE, indicatorul va marca prima valoare. După ce RESTORE schimbă poziția pointerului, orice READ ulterioară va începe să citească datele din noua poziție specificată.

Este util să folosiți operatorul DATE în cazurile în care unor variabile trebuie să li se atribuie aceleași valori de fiecare dată când programul este executat.

rutine de bază ale limbajului

a) Instrucțiuni GOSUB și RETURN

Când scrieți programe, este adesea nevoie să efectuați aceleași acțiuni în diferite locuri din program. În multe cazuri, aceste acțiuni trebuie efectuate cu date inițiale diferite. Scrierea unui astfel de program va fi simplificată dacă notați o singură secțiune de calcule care se repetă și apoi accesați-o din diferite locuri din program. Această posibilitate este oferită de utilizarea subrutinelor.

În BASIC, o subrutină este accesată folosind instrucțiunea GOSUB.

Format: GOSUB N

GOSUB - cuvânt cheie;

N este numărul primei linii de la care ar trebui să înceapă execuția subrutinei (punctul de intrare în subprogram).

Ultima instrucțiune executată într-o subrutină trebuie să fie o instrucțiune RETURN, returnând controlul programului principal.

Instrucțiunile GOSUB și RETURN funcționează după cum urmează. Interpretul BASIC creează o stivă de returnare. Când o instrucțiune GOSUB este întâlnită într-un program, interpretul împinge adresa (numărul de linie) al instrucțiunii imediat după GOSUB în stiva de returnare. Controlul este apoi transferat la punctul de intrare specificat de numărul liniei din instrucțiunea GOSUB, iar instrucțiunile subrutinei încep să fie executate. Dacă o instrucțiune RETURN este întâlnită într-o subrutină, adresa de returnare curentă este scoasă din partea de sus a stivei, iar interpretul transferă controlul către programul apelant la instrucțiunea imediat următoare instrucțiunii GO SUB.

Exemplu: Există date despre suprafața însămânțată cu grâu la fermele din regiune. Este necesar să se determine numărul de ferme în care suprafața este mai mare decât o anumită valoare.

10 Programul principal REM

30 PRINT „Introduceți numărul de ferme”

60 PRINT "Intra in zona cultivata a fermei" ;I

90 PRINT "Introduceți limita inferioară a suprafeței semănate" 100 INTRARE D

120 PRINT „Număr de ferme cu suprafață însămânțată >”; D;"=" ; K

Subrutină 200 REM

220 PENTRU I=1 LA M