Aldagaiak eta konstanteak VBAn

VBAn, beste edozein programazio-lengoaian bezala, aldagaiak eta konstanteak erabiltzen dira edozein balio gordetzeko. Izenak dioen bezala, aldagaiak alda daitezke, konstanteek balio finkoak gordetzen dituzten bitartean.

Adibidez, konstante bat Pi 3,14159265 balioa gordetzen du... "Pi" zenbakia ez da aldatuko programaren exekuzioan zehar, baina oraindik erosoagoa da balio hori konstante gisa gordetzea.

Aldi berean, aldagaia erabil dezakegu sVAT_Tasa erositako ondasunen BEZaren tasa gordetzeko. Balio aldakorra sVAT_Tasa erositako produktuaren arabera alda daiteke.

Datu motak

Aldagai eta konstante guztiak datu mota jakin batekoak dira. Beheko taulak VBAn erabiltzen diren datu motak zerrendatzen ditu balio posibleen deskribapen eta sortarekin:

Datu mota TamainaDeskribapenaBalio sorta
byte1 byteZenbaki oso positiboak; sarritan datu bitaretarako erabiltzen datik 0 255
boolean2 byteEgia ala gezurra izan daitekeEgia edo Gezurra
Osokoa2 byteZenbaki osoak (zatikirik gabe)-32tik +768era
Long4 byteZenbaki oso handiak (zatikirik gabe)от -2 147 483 648 до +2 147 483 647
bakar4 byteDoitasun bakarreko koma mugikorreko zenbakia-3.4e38tik +3.4e38ra
Bikoitza8 byteDoitasun bikoitzeko koma mugikorreko zenbakia-1.8e308tik +1.8e308ra
Moneta8 byteKoma mugikorreko zenbakia, hamartar kopuru finko batekinот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
data8 byteData eta ordua – Data motako datuak koma mugikorreko zenbaki batekin adierazten dira. Zenbaki honen zati osoak data adierazten du, eta zati zatiak ordua.1eko urtarrilaren 100etik 31ko abenduaren 9999ra arte
Objektu4 byteObjektu erreferentziaEdozein objektu erreferentzia
Stringaldatzen ari daPertsonaien multzoa. String mota luzera finkoa edo aldakorra izan daiteke. Gehiago erabiltzen da luzera aldakorrarekinLuzera finkoa: 65 karaktere inguru. Luzera aldakorra: 500 mila milioi karaktere inguru
Aldaeraaldatzen ari daData, karaktere-katea edo karaktere-katea izan ditzake. Mota hau aldez aurretik zein datu-mota sartuko den ezagutzen ez den kasuetan erabiltzen da.Zenbakia – Bikoitza, katea – Katea

Jakina, goiko taula erabiliz eta datu-mota egokia aukeratuz, memoria modu ekonomikoagoan erabil dezakezu (adibidez, aukeratu datu-mota Osokoa ordez Long or bakar ordez Bikoitza). Hala ere, datu-mota trinkoagoak erabiltzen dituzunean, kontuz ibili behar duzu zure kodea ez den saiatuko balio neurrigabeak sartzen.

Aldagaiak eta konstanteak deklaratzea

Itzultzailearen oharra: VBAko aldagaiei buruz hitz egitean, aipatzea komeni da puntu garrantzitsu bat gehiago. Aldagai bat deklaratzen badugu baina ez badiogu baliorik ematen, orduan lehenetsitako balio batekin hasieratuko da:

• testu-kateak kate hutsekin hasieratzen dira;

• zenbakiak — balioa 0;

• motako aldagaiak boolean — Gezurra;

• datak – 30ko abenduaren 1899a.

Aldagai edo konstante bat erabili aurretik, deklaratu behar da. Horretarako, gehitu kode lerro sinple hau makroari:

Dim Имя_Переменной As Тип_Данных

Goiko kode lerroan Aldagai_izena kodean erabiliko den aldagaiaren izena da, eta Datu_mota artikulu honetan apur bat lehenago emandako taulako datu-motetako bat da. Adibidez:

Dim sVAT_Rate As Single Dim i Integer gisa

Konstanteak antzera deklaratzen dira, baina konstanteak deklaratzean, haien balioa berehala adierazi behar da. Adibidez, honela:

Const iMaxCount = 5000 Const iMaxScore = 100

Ez da beharrezkoa Excel-en aldagaiak deklaratzea. Lehenespenez, Excel-en sartutako baina deklaratu gabeko aldagai guztiek izango dute mota Aldaera eta balio numerikoa zein testuala onartzeko gai izango da.

Horrela, programatzaileak edozein unetan erabil dezake aldagai berria (nahiz eta deklaratu ez izan), eta Excel-ek motako aldagai gisa tratatuko du. Aldaera. Hala ere, hainbat arrazoi daude hau egin behar ez izateko:

  1. Memoriaren erabilera eta konputazio-abiadura. Ez baduzu aldagairik deklaratzen datu-motaren adierazpenarekin, lehenespenez, motaren arabera ezarriko da Aldaera. Datu mota honek beste datu-motak baino memoria gehiago erabiltzen du. Aldagai bakoitzeko byte gehigarri batzuk agian ez dira asko iruditzen, baina praktikan, programek milaka aldagai izan ditzakete (batez ere arrayekin lan egiten dutenean). Beraz, aldagaiek erabiltzen duten memoria gehigarria Aldaera, motako aldagaiekin alderatuta Osokoa or bakar, kopuru esanguratsua izan daiteke. Horrez gain, motako aldagaiekin eragiketak Aldaera beste mota bateko aldagaiekin baino askoz motelago exekutatzen dira, hurrenez hurren, motako mila aldagai gehigarri Aldaera kalkuluak nabarmen moteldu ditzake.
  2. Aldagaien izenetan akatsen prebentzioa. Aldagai guztiak deklaratzen badira, VBA instrukzioa erabil daiteke - Aukera esplizitua (geroago hitz egingo dugu) deklaratu gabeko aldagai guztiak identifikatzeko. Honek programan errore bat agertzea ezabatzen du gaizki idatzitako aldagai-izen baten ondorioz. Adibidez, izeneko aldagai bat erabiliz sVAT_Tasa, idazketa bat egin dezakezu eta aldagai honi balio bat emanez, idatzi: “VATRate = 0,175”. Espero da hemendik aurrera, aldagaia sVAT_Tasa 0,175 balioa eduki beharko luke, baina, noski, ez du. Erabilitako aldagai guztien derrigorrezko deklarazio modua gaituta badago, orduan VBA konpilatzaileak errore bat adieraziko du berehala, aldagaia ez baitu aurkituko. BEZTasa iragarritakoen artean.
  3. Aldagai baten mota deklaratuarekin bat ez datozen balioak nabarmentzea. Mota jakin bateko aldagai bat deklaratzen baduzu eta hari beste mota bateko datuak esleitzen saiatzen bazara, errore bat jasoko duzu, eta, zuzentzen ez bada, programa huts egitea eragin dezake. Lehen begiratuan, aldagaiak ez deklaratzeko arrazoi ona dirudi, baina, egia esan, aldagaietako batek jaso behar zituen datu okerrak jaso zituela ikusten da, askoz hobeto! Bestela, programak exekutatzen jarraitzen badu, emaitzak okerrak eta ustekabekoak izan daitezke, eta askoz zailagoa izango da akatsen kausa aurkitzea. Baliteke makroa " arrakastaz " exekutatzea ere. Ondorioz, errorea oharkabean pasatuko da eta lanean jarraituko da datu okerrekin!

Ildo horretan, komeni da datu-mota oker bat detektatzea eta akats horiek kodean ahalik eta lasterren zuzentzea. Arrazoi hauengatik, VBA makro bat idaztean aldagai guztiak deklaratzea gomendatzen da.

Aukera esplizitua

Operator Aukera esplizitua VBA kodean erabiliko diren aldagai guztiak deklaratzea eragiten du, eta deklaratu gabeko aldagai guztiak akats gisa markatzen ditu konpilazioan (kodea exekutatzen hasi aurretik). Operadore hau aplikatzea ez da zaila - idatzi lerro hau VBA fitxategiaren goialdean:

Option Explicit

Beti sartu nahi baduzu Aukera esplizitua sortutako VBA modulu berri bakoitzaren goialdean, hau automatikoki egin daiteke. Horretarako, aukera gaitu behar duzu Aldagaien Adierazpena eskatu VBA editorearen ezarpenetan.

Hau horrela egiten da:

  • Visual Basic Editor menuan, egin klik tresnak > Aukerak
  • Agertzen den elkarrizketa-koadroan, ireki fitxa Editor
  • Begiratu laukia Aldagaien Adierazpena eskatu eta prentsa OK

Gaituta dagoenean, katea Aukera esplizitua automatikoki txertatuko da sortutako modulu berri bakoitzaren hasieran.

Aldagaien eta konstanteen esparrua

Adierazitako aldagai edo konstante bakoitzak bere esparru mugatua du, hau da, aldagai hori dagoen programaren zati mugatu bat. Eremua aldagaiaren edo konstantearen deklarazioa non egin denaren araberakoa da. Har dezagun, adibidez, aldagaia sVAT_Tasa, funtzioan erabiltzen dena Guztira_Kostua. Hurrengo taulan aldagai-esparrurako bi aukera aztertzen dira sVAT_Tasamoduluko bi posizio ezberdinetan deklaratua:

Aukera Esplizitua Dim sVAT_Rate Funtzio bakar gisa Total_Cost() Bikoitza gisa ... Amaiera Funtzioa
Aldagaia bada sVAT_Tasa moduluaren hasieran adierazita, orduan aldagai honen esparrua modulu osoa izango da (hau da, aldagaia sVAT_Tasa modulu honetako prozedura guztiek aitortuko dute).

Beraz, funtzioan bada Guztira_Kostua aldagaia sVAT_Tasa balioren bat esleituko zaio, orduan modulu berean exekutatzen den hurrengo funtzioak aldagaia erabiliko du sVAT_Tasa esanahi berarekin.

Hala ere, beste modulu batean kokatutako funtzioren bati deitzen bazaio, orduan aldagaia da sVAT_Tasa ez da ezagutuko.

Aukera Funtzio esplizitua Total_Cost() Dim bikoitza gisa sVAT_Rate Bakar gisa ... Amaiera funtzioa
Aldagaia bada sVAT_Tasa funtzioaren hasieran deklaratua Guztira_Kostua, orduan bere esparrua funtzio honetara soilik mugatuko da (hau da, funtzioaren barruan Guztira_Kostua, aldagaia erabil dezakezu sVAT_Tasa, baina ez kanpoan).

Erabili saiatzean sVAT_Tasa beste prozedura batean, VBA konpilatzaileak errore baten berri emango du aldagai hau funtziotik kanpo deklaratu ez delako Guztira_Kostua (baldin eta operadorea erabiltzen bada Aukera esplizitua).

Goian erakusten den adibidean, aldagaia modulu mailan deklaratzen da gako-hitzarekin Ilundu. Hala ere, beharrezkoa izan daiteke deklaratutako aldagaiak beste modulu batzuetan erabiltzea. Horrelakoetan, gako-hitz baten ordez aldagai bat deklaratzeko Ilundu gakoa erabili behar da Publikoa.

Bide batez, modulu mailan aldagai bat deklaratzeko, gako-hitzaren ordez Ilundu gako-hitza erabil daiteke Pribatua, eta horrek adierazten du aldagai hau uneko moduluan soilik erabiltzeko pentsatuta dagoela.

Gako-hitzak ere erabil ditzakezu konstanteak deklaratzeko. Publikoa и Pribatua, baina ez gako-hitzaren ordez const, horrekin batera.

Ondorengo adibideek hitz gakoen erabilera erakusten dute Publikoa и Pribatua aldagai eta konstanteei aplikatuta.

Aukera Publiko esplizitua sVAT_Rate Konstituzio publiko bakarra gisa iMax_Count = 5000 ...    
Adibide honetan, gako-hitza Publikoa aldagai bat deklaratzeko erabiltzen da sVAT_Tasa eta konstanteak iMax_Count. Horrela deklaratutako elementuen esparrua egungo proiektu osoa izango da.

Horrek esan nahi du sVAT_Tasa и iMax_Count edozein proiektu-modulutan egongo da eskuragarri.

Aukera Pribatu esplizitua sVAT_Rate Konstante pribatu bakar gisa iMax_Count = 5000 ...    
Adibide honetan, aldagai bat deklaratzeko sVAT_Tasa eta konstanteak iMax_Count erabilitako gako-hitza Pribatua. Elementu horien esparrua egungo modulua da.

Horrek esan nahi du sVAT_Tasa и iMax_Count egungo moduluko izapide guztietan egongo da eskuragarri, baina ez da beste moduluetako izapideetarako erabilgarri egongo.

Utzi erantzun bat