„Excel VBA“ duomenų tipų (kintamųjų ir konstantų) supratimas

„Excel VBA“ dažnai turėsite naudoti kintamuosius ir konstantas.

Dirbant su VBA, kintamasis yra vieta kompiuterio atmintyje, kurioje galite saugoti duomenis. Duomenų, kuriuos galite saugoti kintamajame, tipas priklausys nuo kintamojo duomenų tipo.

Pvz., Jei norite kintamajame saugoti sveikus skaičius, jūsų duomenų tipas būtų „Sveikasis skaičius“, o jei norite išsaugoti tekstą, jūsų duomenų tipas bus „Eilutė“.

Daugiau apie duomenų tipus vėliau šioje pamokoje.

Nors kintamojo vertė keičiasi, kai kodas yra vykdomas, konstanta turi vertę, kuri niekada nesikeičia. Kaip gera kodavimo praktika, turėtumėte apibrėžti duomenų tipą - kintamasis ir pastovus.

Kodėl naudoti kintamuosius VBA?

Kai koduojate VBA, jums reikės kintamųjų, kuriuos galite naudoti norėdami išlaikyti vertę.

Kintamojo naudojimo pranašumas yra tas, kad galite pakeisti kintamojo vertę kode ir toliau jį naudoti kode.

Pavyzdžiui, žemiau yra kodas, kuris prideda pirmuosius 10 teigiamų skaičių, o tada parodo rezultatą pranešimų laukelyje:

Sub AddFirstTenNumbers () Dim Var As Integer Dim i As Integer Dim k as Integer For i = 1 to 10 k = k + i Next i MsgBox k End Sub

Pirmiau pateiktame kode yra trys kintamieji - Var, i, ir k.

Aukščiau pateiktas kodas naudoja „For Next“ ciklą, kuriame visi šie trys kintamieji keičiami, kai ciklai baigiami.

Kintamojo naudingumas slypi tame, kad jį galima keisti, kol vykdomas jūsų kodas.

Toliau pateikiamos kelios taisyklės, kurių reikia nepamiršti įvardinant kintamuosius VBA:

  1. Galite naudoti abėcėlę, skaičius ir skyrybos ženklus, tačiau pirmasis skaičius turi būti abėcėlė.
  2. Kintamojo pavadinime negalima naudoti tarpo ar taško. Tačiau galite naudoti pabraukimo simbolį, kad kintamųjų pavadinimai būtų lengviau skaitomi (pvz., Palūkanų norma)
  3. Kintamųjų pavadinimuose negalima naudoti specialiųjų simbolių (#, $, %, &, arba!)
  4. VBA neskiria atvejo kintamojo pavadinime. Taigi „InterestRate“ ir „interestrate“ VBA yra vienodi. Jei norite, kad kintamieji būtų lengviau įskaitomi, galite naudoti mišrias didžiąsias raides.
  5. VBA turi keletą rezervuotų pavadinimų, kuriuos galite naudoti kintamojo pavadinimui. Pavyzdžiui, negalite naudoti žodžio „Kitas“ kaip kintamojo pavadinimo, nes tai yra rezervuotas „For Next“ kilpos pavadinimas.
  6. Jūsų kintamojo pavadinimas gali būti iki 254 simbolių.

Kintamųjų duomenų tipas

Norint kuo geriau išnaudoti kintamuosius, gera praktika yra nurodyti kintamojo duomenų tipą.

Duomenų tipas, kurį priskiriate kintamajam, priklausys nuo to, kokio tipo duomenis norite laikyti kintamajame.

Žemiau yra lentelė, kurioje rodomi visi galimi duomenų tipai, kuriuos galite naudoti „Excel VBA“:

Duomenų tipas Naudojami baitai Vertybių diapazonas
Baitas 1 baitas Nuo 0 iki 255
Būlinį 2 baitai Tiesa ar melas
Sveikasis skaičius 2 baitai Nuo 32 768 iki 32 767
Ilgas (ilgas sveikasis skaičius) 4 baitai -2 147 483 648 iki 2 147 483 647
Vienišas 4 baitai -3.402823E38 iki -1.401298E -45 neigiamoms vertėms; 1.401298E-45 iki 3.402823E38 teigiamoms vertėms
Dvigubas 8 baitai -1.79769313486231E308 iki -4,94065645841247E-324 neigiamoms vertėms; 4.94065645841247E-324 iki 1,79769313486232E308 teigiamoms vertėms
Valiuta 8 baitai -922,337,203,685,477.5808 iki 922,337,203,685,477.5807
Dešimtainis 14 baitų +/- 79,228,162,514,264,337,593,543,950,335 be kablelio; +/- 7,9228162514264337593543950335 su 28 vietomis dešimtainio tikslumu
Data 8 baitai Sausio 1 d. - 9999 m. Gruodžio 31 d
Objektas 4 baitai Bet kokia objekto nuoroda
Styga (kintamo ilgio) 10 baitų + eilutės ilgis Nuo 0 iki maždaug 2 mlrd
Styga (fiksuoto ilgio) Virvelės ilgis 1 iki maždaug 65 400
Variantas (su skaičiais) 16 baitų Bet kokia skaitmeninė vertė iki dvigubo diapazono
Variantas (su simboliais) 22 baitai + eilutės ilgis Tas pats diapazonas kaip ir kintamo ilgio eilutei
Naudotojo apibrėžta Skiriasi Kiekvieno elemento diapazonas yra toks pat kaip jo duomenų tipo diapazonas.

Kai kode nurodote kintamojo duomenų tipą, jis nurodo VBA, kaip saugoti šį kintamąjį ir kiek vietos jam skirti.

Pavyzdžiui, jei jums reikia naudoti kintamąjį, skirtą mėnesio skaičiui laikyti, galite naudoti duomenų tipą BYTE (kuriame gali būti nuo 0 iki 255 reikšmių). Kadangi mėnesio skaičius nebus didesnis nei 12, tai veiks gerai ir taip pat rezervuos mažiau atminties šiam kintamajam.

Priešingai, jei jums reikia kintamojo, kad išsaugotumėte „Excel“ eilučių numerius, turite naudoti duomenų tipą, kuris talpina skaičių iki 1048756. Taigi geriausia naudoti ilgų duomenų tipą.

Kintamų duomenų tipų deklaravimas

Kaip gera kodavimo praktika, rašydami kodą turėtumėte nurodyti kintamųjų (arba konstantų) duomenų tipą. Tai padarius įsitikinama, kad VBA kintamajam skiria tik nurodytą atmintį ir tai gali pagreitinti jūsų kodo veikimą.

Žemiau yra pavyzdys, kai skirtingiems kintamiesiems paskelbiau skirtingų tipų duomenis:

Sub DeclaringVariables () Dim X kaip sveikas skaičius Dim Email kaip String Dim FirstName As String Dim Eilė Skaičius kaip ilgai Dim Šiandien Data kaip Date End Sub

Norėdami deklaruoti kintamąjį duomenų tipą, turite naudoti DIM sakinį (kuris yra trumpinys Dimension).

Dim X kaip sveikasis skaičius„Aš paskelbiau kintamąjį X kaip sveikų duomenų tipą.

Dabar, kai naudoju jį savo kode, VBA žinotų, kad X gali laikyti tik sveiko skaičiaus duomenų tipą.

Jei bandysiu jam priskirti vertę, kuri nėra sveikasis skaičius, gausiu klaidą (kaip parodyta žemiau):

Pastaba: Taip pat galite pasirinkti nedeklaruoti duomenų tipo, tokiu atveju VBA automatiškai atsižvelgia į duomenų tipo varianto kintamąjį. Duomenų tipas gali atitikti bet kokio tipo duomenis. Nors tai gali atrodyti patogu, nėra geriausia naudoti duomenų tipų variantus. Tai paprastai užima daugiau atminties ir gali sulėtinti jūsų VBA kodo veikimą.

Kintamosios deklaracijos privalomumas (aiškus pasirinkimas)

Nors galite koduoti niekada nedeklaruodami kintamųjų, tai gera praktika tai padaryti.

Be atminties taupymo ir kodo efektyvinimo, kintamųjų deklaravimas turi dar vieną svarbų pranašumą - jis padeda sugauti klaidas, kurias sukelia klaidingai parašyti kintamųjų pavadinimai.

Norėdami įsitikinti, kad esate priversti deklaruoti kintamuosius, pridėkite šią eilutę modulio viršuje.

Pasirinkimas aiškus

Pridėję „Option Explicit“, prieš paleisdami kodą turėsite deklaruoti visus kintamuosius. Jei yra koks nors kintamasis, kuris nebuvo deklaruotas, VBA parodys klaidą.

„Option Explicit“ naudojimas turi didžiulę naudą.

Kartais galite padaryti spausdinimo klaidą ir įvesti neteisingą kintamojo pavadinimą.

Paprastai VBA negali žinoti, ar tai klaida, ar tyčia. Tačiau kai naudojate „Option Explicit“, VBA klaidingai parašytą kintamojo pavadinimą matys kaip naują kintamąjį, kuris nebuvo deklaruotas ir parodys jums klaidą. Tai padės jums atpažinti šiuos klaidingai parašytus kintamųjų pavadinimus, kuriuos ilgame kode gali būti gana sunku pastebėti.

Žemiau pateikiamas pavyzdys, kai naudojant parinktį „Explicit“ nustatoma klaida (kuri negalėjo būti įstrigusi, jei nenaudočiau „Option Explicit“)

Sub CommissionCalc () Dim CommissionRate as Double If Range ("A1"). Vertė> 10000 Tada CommissionRate = 0,1 Else CommissionRtae = 0,05 End If MsgBox "Total Commission:" & Range ("A1"). Reikšmė * CommissionRate End Sub

Atminkite, kad šiame kode vieną kartą neteisingai parašiau žodį „CommissionRate“.

Jei nenaudosiu „Option Explicit“, šis kodas būtų paleistas ir suteiktų neteisingą bendrą komisinių vertę (jei A1 langelyje esanti vertė yra mažesnė nei 10000).

Bet jei modulio viršuje naudoju „Option Explicit“, tai neleis man paleisti šio kodo, kol neištaisysiu klaidingai parašyto žodžio arba nepaskelbsiu jo kaip kito kintamojo. Tai parodys klaidą, kaip parodyta žemiau:

Nors kiekvieną kartą, kai koduojate, galite įterpti eilutę „Option Explicit“, čia pateikiami veiksmai, kad ji būtų rodoma pagal numatytuosius nustatymus:

  1. VB redaktoriaus įrankių juostoje spustelėkite Įrankiai.
  2. Spustelėkite Parinktys.
  3. Dialogo lange Parinktys spustelėkite skirtuką Redaktorius.
  4. Pažymėkite parinktį - „Reikalauti kintamosios deklaracijos“.
  5. Spustelėkite Gerai.

Kai įjungsite šią parinktį, kai atidarysite naują modulį, VBA prie jos automatiškai pridės eilutę „Option Explicit“.

Pastaba: Ši parinktis paveiks tik visus modulius, kuriuos sukuriate įjungę šią parinktį. Visi esami moduliai neturi įtakos.

Kintamųjų apimtis

Iki šiol matėme, kaip deklaruoti kintamąjį ir priskirti jam duomenų tipus.

Šiame skyriuje aptarsiu kintamųjų apimtį ir tai, kaip galite paskelbti kintamąjį, kad jis būtų naudojamas tik paprogramėje, visame modulyje arba visuose moduliuose.

Kintamojo apimtis nustato, kur kintamąjį galima naudoti VBA,

Yra trys būdai, kaip pritaikyti kintamąjį „Excel VBA“:

  1. Vienoje paprogramėje (vietiniai kintamieji)
  2. Modulio viduje (modulio lygio kintamieji)
  3. Visuose moduliuose (viešieji kintamieji)

Pažvelkime į kiekvieną iš jų išsamiai.

Vienoje paprogramėje (vietiniai kintamieji)

Kai deklaruojate kintamąjį paprogramėje/procedūroje, tas kintamasis galimas tik tai paprogramei.

Negalite jo naudoti kitose modulio paprogramėse.

Kai tik paprogramė baigiasi, kintamasis ištrinamas ir jo naudojama atmintis atlaisvinama.

Žemiau pateiktame pavyzdyje kintamieji deklaruojami paprogramėje ir bus ištrinti, kai ši paprograma baigsis.

Modulio viduje (modulio lygio kintamieji)

Jei norite, kad kintamasis būtų prieinamas visoms modulio procedūroms, turite jį deklaruoti modulio viršuje (o ne jokioje paprogramėje).

Kai deklaruosite jį modulio viršuje, galėsite naudoti tą kintamąjį visose to modulio procedūrose.

Pirmiau pateiktame pavyzdyje kintamasis „i“ yra nurodytas modulio viršuje ir yra prieinamas visiems moduliams.

Atminkite, kad pasibaigus paprogramei modulio lygio kintamieji nėra ištrinami (ji išlaiko savo vertę).

Žemiau yra pavyzdys, kuriame turiu du kodus. Kai paleidžiu pirmąją procedūrą, o paskui - antrąją, „i“ reikšmė tampa 30 (nes ji turi 10 reikšmių iš pirmosios procedūros)

Visuose moduliuose (viešieji kintamieji)

Jei norite, kad kintamasis būtų pasiekiamas visose darbaknygės procedūrose, turite jį deklaruoti naudodami viešą raktinį žodį (vietoj DIM).

Žemiau esančioje kodo eilutėje modulio viršuje kintamasis „CommissionRate“ būtų pasiekiamas visuose darbo knygos moduliuose.

 Viešoji komisija Įvertinkite dvigubai

Galite įterpti kintamojo deklaraciją (naudodami viešą raktinį žodį) į bet kurį modulį (viršuje prieš bet kokią procedūrą).

Statiniai kintamieji (išsaugo vertę)

Kai dirbate su vietiniais kintamaisiais, kai tik procedūra baigsis, kintamasis praras savo vertę ir bus ištrintas iš VBA atminties.

Jei norite, kad kintamasis išlaikytų vertę, turite naudoti Statinis raktinis žodis.

Pirmiausia parodysiu, kas nutinka įprastu atveju.

Žemiau esančiame kode, kai procedūrą atlieku kelis kartus, ji kiekvieną kartą parodys reikšmę 10.

Antroji procedūra1 () Dim i As Integer i = i + 10 MsgBox i End Sub

Dabar, jei vietoj DIM naudoju statinį raktinį žodį ir atlieku procedūrą kelis kartus, jis ir toliau rodys reikšmes po 10. Taip atsitinka, kai kintamasis „i“ išlaiko savo vertę ir naudoja jį skaičiuojant.

1 papildoma procedūra

Konstantų deklaravimas „Excel VBA“

Nors kintamieji gali keistis vykdant kodą, jei norite turėti fiksuotas vertes, galite naudoti konstantas.

Konstanta leidžia pavadintai eilutei priskirti vertę, kurią galite naudoti savo kode.

Konstantos naudojimo pranašumas yra tai, kad ji leidžia lengvai rašyti ir suprasti kodą, taip pat leidžia valdyti visas fiksuotas vertes iš vienos vietos.

Pavyzdžiui, jei skaičiuojate komisinius, o komisinių dydis yra 10%, galite sukurti konstantą (CommissionRate) ir priskirti jai 0,1 vertę.

Ateityje, jei komisinis tarifas pasikeis, jums tereikia jį pakeisti vienoje vietoje, o ne rankiniu būdu keisti kodą visur.

Žemiau yra kodo pavyzdys, kai konstantai priskyriau reikšmę:

Sub CalculateCommission () Dim CommissionValue As Double Const CommissionRate As Double = 0.1 CommissionValue = Range ("A1") * CommissionRate MsgBox CommissionValue End Sub

Ši eilutė naudojama konstantai deklaruoti:

Const CommissionRate As Double = 0.1

Kai deklaruojate konstantas, turite pradėti nuo raktinio žodžio „Konst“, Po kurio nurodomas konstantos pavadinimas.

Atminkite, kad šiame pavyzdyje konstantos duomenų tipą nurodiau kaip dvigubą. Vėlgi, gera praktika yra nurodyti duomenų tipą, kad jūsų kodas veiktų greičiau ir būtų efektyvesnis.

Jei nedeklaruosite duomenų tipo, jis bus laikomas alternatyviu duomenų tipu.

Kaip ir kintamieji, konstantos taip pat gali turėti apimtį pagal tai, kur ir kaip jie deklaruojami:

  1. Vienoje paprogramėje (vietinės konstantos): Jie pateikiami paprogramėje/procedūroje, kurioje jie deklaruojami. Pasibaigus procedūrai, šios konstantos ištrinamos iš sistemos atminties.
  2. Modulio viduje (modulio lygio konstantos): Jie pateikiami modulio viršuje (prieš bet kokias procedūras). Jie yra prieinami visoms modulio procedūroms.
  3. Visuose moduliuose (viešosios konstantos): Jie deklaruojami naudojant raktinį žodį „Viešas“, bet kurio modulio viršuje (prieš bet kokią procedūrą). Jie yra prieinami visoms procedūroms visuose moduliuose.

Jums taip pat gali patikti šios VBA pamokos:

  • Kaip įrašyti makrokomandą „Excel“
  • Darbas su ląstelėmis ir diapazonais „Excel VBA“
  • Darbas su darbalapiais naudojant „Excel VBA“
  • Darbas su darbaknygėmis „Excel VBA“
  • VBA renginiai
  • „Excel VBA“ kilpos
  • Kaip paleisti makrokomandą „Excel“
  • Jei tada kitas teiginys „Excel VBA“.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave