Breytur og fastar í VBA

Í VBA, eins og í hverju öðru forritunarmáli, eru breytur og fastar notaðar til að geyma hvaða gildi sem er. Eins og nafnið gefur til kynna geta breytur breyst á meðan fastar geyma föst gildi.

Til dæmis, fasti Pi geymir gildið 3,14159265... Talan „Pi“ mun ekki breytast meðan forritið er keyrt, en samt er þægilegra að geyma slíkt gildi sem fasta.

Á sama tíma getum við notað breytuna sVAT_Rate að geyma virðisaukaskattshlutfall af keyptum vörum. Breytilegt gildi sVAT_Rate getur verið mismunandi eftir vörunni sem keypt er.

Gagnategundir

Allar breytur og fastar eru af ákveðinni gagnategund. Taflan hér að neðan sýnir gagnategundirnar sem notaðar eru í VBA með lýsingu og svið mögulegra gilda:

Gagnagerð SizeLýsingGildissvið
Bæti1 bytesJákvæðar heiltölur; oft notað fyrir tvöfalda gögnfrá 0 til 255
Boolean2 bytesGetur verið annað hvort satt eða ósattSatt eða ósatt
Integer2 bytesHeilar tölur (enginn brothluti)frá -32 til +768
Long4 bytesStórar heilar tölur (engin brothluti)от -2 147 483 648 до +2 147 483 647
einn4 bytesFljótapunktsnúmer með nákvæmnifrá -3.4e38 í +3.4e38
Tvöfaldur8 bytesTvöföld nákvæmni flottalafrá -1.8e308 í +1.8e308
Gjaldmiðill8 bytesFlottölunúmer, með föstum fjölda aukastafaот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Dagsetning8 bytesDagsetning og tími – Gögn af gerðinni Dagsetning er táknuð með fljótandi tölu. Heiltöluhluti þessarar tölu sýnir dagsetninguna og brotahluti gefur til kynna tímann.frá 1. janúar 100 til 31. desember 9999
Object4 bytesTilvísun hlutaHvaða tilvísun sem er
Bander að breytastPersónusett. Strengjagerðin getur verið af föstri eða breytilegri lengd. Meira notað með breytilegri lengdFöst lengd - allt að um það bil 65 stafir. Breytileg lengd – allt að um það bil 500 milljarðar stafa
Varianter að breytastGetur innihaldið dagsetningu, flot eða stafastreng. Þessi tegund er notuð í þeim tilvikum þar sem ekki er vitað fyrirfram hvers konar gögn verða færð inn.Tala - Tvöfaldur, strengur - Strengur

Augljóslega, með því að nota töfluna hér að ofan og velja rétta gagnategund, geturðu notað minni á hagkvæmari hátt (til dæmis, veldu gagnategundina Integer staðinn Long or einn staðinn Tvöfaldur). Hins vegar, þegar þú notar fyrirferðarmeiri gagnategundir, þarftu að gæta þess að kóðinn þinn reyni ekki að passa óhóflega stór gildi inn í þá.

Lýsa yfir breytum og stöðugum

Athugasemd þýðanda: Talandi um breytur í VBA er vert að minnast á eitt mjög mikilvægt atriði í viðbót. Ef við lýsum yfir breytu en gefum henni ekkert gildi, þá er hún frumstillt með sjálfgefnu gildi:

• textastrengir eru frumstilltir með tómum strengjum;

• tölur — gildi 0;

• tegundabreytur Boolean - Rangt;

• dagsetningar – 30. desember 1899.

Áður en hægt er að nota breytu eða fasta verður að gefa upp hana. Til að gera þetta skaltu bæta eftirfarandi einföldu kóðalínu við fjölvi:

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

Í ofangreindri kóðalínu Breytanafn er nafn breytunnar sem verður notuð í kóðanum, og Data_Type er ein af gagnategundunum úr töflunni sem gefin er aðeins fyrr í þessari grein. Til dæmis:

Dimma sVAT_Rate As Single Dim i As Heiltala

Stöður eru gefnar upp á svipaðan hátt, en þegar fastar eru gefnir upp þarf strax að tilgreina gildi þeirra. Til dæmis, svona:

Const iMaxCount = 5000 Const iMaxScore = 100

Ekki er nauðsynlegt að gefa upp breytur í Excel. Sjálfgefið er að allar innsláttar en ekki uppgefnar breytur í Excel hafa tegundina Variant og mun geta tekið við bæði tölugildi og textagildi.

Þannig getur forritarinn notað nýju breytuna hvenær sem er (jafnvel þótt henni hafi ekki verið lýst yfir), og Excel mun meðhöndla hana sem breytu af gerðinni Variant. Hins vegar eru nokkrar ástæður fyrir því að þetta ætti ekki að gera:

  1. Minnisnotkun og reiknihraði. Ef þú lýsir ekki yfir breytu með vísbendingu um gagnategundina, þá verður hún sjálfgefið stillt á tegundina Variant. Þessi gagnategund notar meira minni en aðrar gagnategundir. Nokkur auka bæti á hverja breytu hljómar kannski ekki eins mikið, en í reynd geta forrit haft þúsundir breyta (sérstaklega þegar unnið er með fylki). Þess vegna er aukaminni notað af breytum eins og Variant, samanborið við breytur af gerðinni Integer or einn, getur numið umtalsverðu magni. Auk þess aðgerðir með breytum af gerðinni Variant eru framkvæmdar mun hægar en með breytum af öðrum gerðum, í sömu röð, þúsund aukabreytur af gerðinni Variant getur dregið verulega úr útreikningum.
  2. Forvarnir gegn innsláttarvillum í breytuheitum. Ef allar breytur eru gefnar upp, þá er hægt að nota VBA setninguna − Valkostur skýr (við munum tala um það síðar) til að bera kennsl á allar ótilgreindar breytur. Þetta útilokar útlit villu í forritinu sem afleiðing af rangt skrifað breytuheiti. Til dæmis að nota breytu sem heitir sVAT_Rate, þú getur gert innsláttarvillu og úthlutað gildi á þessa breytu, skrifað: "VATRate = 0,175". Gert er ráð fyrir að héðan í frá verði breyt sVAT_Rate ætti að innihalda gildið 0,175 – en það gerir það auðvitað ekki. Ef kveikt er á lögboðinni yfirlýsingu allra notaðra breyta mun VBA þýðandinn strax gefa til kynna villu þar sem hann finnur ekki breytuna virðisaukaskattur meðal þeirra sem tilkynnt var.
  3. Auðkenna gildi sem passa ekki við uppgefna gerð breytu. Ef þú lýsir yfir breytu af ákveðinni gerð og reynir að úthluta gögnum af annarri gerð á hana færðu upp villu sem, ef hún er óleiðrétt, getur valdið því að forritið hrynji. Við fyrstu sýn kann þetta að virðast góð ástæða til að gefa ekki upp breytur, en í raun og veru, en áður, kemur í ljós að ein af breytunum fékk röng gögn sem hún átti að fá - því betra! Annars, ef forritið heldur áfram að keyra, gætu niðurstöðurnar verið rangar og óvæntar og mun erfiðara verður að finna orsök villanna. Það er líka mögulegt að fjölvi verði keyrð „með vel“. Fyrir vikið verður villan óséð og unnið verður áfram með röng gögn!

Í þessu sambandi er æskilegt að greina ranga gagnategund og leiðrétta slíkar villur í kóðanum eins fljótt og auðið er. Af þessum ástæðum er mælt með því að þú gefi upp allar breytur þegar þú skrifar VBA fjölvi.

Valkostur skýr

Flugrekandi Valkostur skýr veldur því að allar breytur sem verða notaðar í VBA kóða eru lýstar yfir, og flaggar allar ótilgreindar breytur sem villur við söfnun (áður en keyrsla kóða hefst). Það er ekki erfitt að nota þennan rekstraraðila - skrifaðu bara þessa línu efst í VBA skránni:

Option Explicit

Ef þú vilt setja alltaf inn Valkostur skýr efst á hverri nýrri VBA einingu sem búin er til, þetta er hægt að gera sjálfkrafa. Til að gera þetta þarftu að virkja valkostinn Krefjast breytilegrar yfirlýsingu í stillingum VBA ritilsins.

Þetta er gert svona:

  • Smelltu á Visual Basic Editor valmyndina verkfæri > Valmöguleikar
  • Í glugganum sem birtist skaltu opna flipann Ritstjóri
  • Merktu við reitinn Krefjast breytilegrar yfirlýsingu og ýttu OK

Þegar virkjað er strengurinn Valkostur skýr verður sjálfkrafa sett inn í upphafi hverrar nýrrar einingu sem búin er til.

Umfang breytu og stöðugra

Hver uppgefin breyta eða fasti hefur sitt takmarkaða umfang, það er takmarkaðan hluta forritsins sem þessi breyta er til í. Umfangið fer eftir því hvar breytingin eða fastans var gefin upp. Tökum sem dæmi breytuna sVAT_Rate, sem er notað í fallinu Heildar kostnaður. Eftirfarandi tafla fjallar um tvo valkosti fyrir breytilegt umfang sVAT_Ratelýst í tveimur mismunandi stöðum í einingunni:

Valkostur Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function
Ef breytan sVAT_Rate lýst yfir í upphafi einingarinnar, þá mun umfang þessarar breytu vera öll einingin (þ.e. breytan sVAT_Rate verður viðurkennt af öllum aðferðum í þessari einingu).

Því ef í fallinu Heildar kostnaður breyta sVAT_Rate verður úthlutað einhverju gildi, þá mun næsta aðgerð sem er framkvæmd innan sömu einingarinnar nota breytuna sVAT_Rate með sömu merkingu.

Hins vegar, ef einhver aðgerð sem staðsett er í annarri einingu er kölluð, þá er breytan fyrir hana sVAT_Rate verður ekki vitað.

Valmöguleiki Skýr aðgerð Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Ef breytan sVAT_Rate lýst yfir í upphafi fallsins Heildar kostnaður, þá takmarkast umfang þess aðeins við þessa aðgerð (þ.e. innan aðgerðarinnar Heildar kostnaður, þú getur notað breytuna sVAT_Rate, en ekki utan).

Þegar reynt er að nota sVAT_Rate í annarri aðferð mun VBA þýðandinn tilkynna um villu vegna þess að þessi breyta var ekki lýst yfir utan fallsins Heildar kostnaður (að því gefnu að rekstraraðilinn sé notaður Valkostur skýr).

Í dæminu sem sýnt er hér að ofan er breytan lýst yfir á einingastigi með lykilorðinu Dimmur. Hins vegar getur verið nauðsynlegt að hægt sé að nota uppgefnar breytur í öðrum einingum. Í slíkum tilfellum, að lýsa yfir breytu í stað lykilorðs Dimmur Nota þarf lykilorð Almenn.

Við the vegur, til að lýsa yfir breytu á mát stigi, í stað lykilorðsins Dimmur Hægt er að nota lykilorð Einka, sem gefur til kynna að þessi breyta sé aðeins ætluð til notkunar í núverandi einingu.

Þú getur líka notað lykilorð til að gefa upp fasta. Almenn и Einka, en ekki í stað lykilorðsins Konst, ásamt því.

Eftirfarandi dæmi sýna notkun leitarorða Almenn и Einka beitt á breytur og fasta.

Valkostur Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Í þessu dæmi er leitarorðið Almenn notað til að lýsa yfir breytu sVAT_Rate og fastar iMax_Count. Umfang þátta sem lýst er yfir á þennan hátt verður allt núverandi verkefni.

Þetta þýðir að sVAT_Rate и iMax_Count verður í boði í hvaða verkefnaeiningu sem er.

Valmöguleiki skýr einka sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
Í þessu dæmi, til að lýsa yfir breytu sVAT_Rate og fastar iMax_Count lykilorð notað Einka. Umfang þessara þátta er núverandi eining.

Þetta þýðir að sVAT_Rate и iMax_Count verður aðgengilegt í öllum aðferðum núverandi einingar, en verður ekki í boði fyrir aðferðir í öðrum einingum.

Skildu eftir skilaboð