Veranderlikes en konstantes in VBA

In VBA, soos in enige ander programmeertaal, word veranderlikes en konstantes gebruik om enige waardes te stoor. Soos die naam aandui, kan veranderlikes verander, terwyl konstantes vaste waardes stoor.

Byvoorbeeld, 'n konstante Pi stoor die waarde 3,14159265... Die getal “Pi” sal nie verander tydens die uitvoering van die program nie, maar dit is steeds geriefliker om so 'n waarde as 'n konstante te stoor.

Terselfdertyd kan ons die veranderlike gebruik sVAT_Tarief om die BTW-koers op gekoopte goedere te stoor. Veranderlike waarde sVAT_Tarief kan wissel na gelang van die produk wat gekoop is.

Datatipes

Alle veranderlikes en konstantes is van 'n spesifieke datatipe. Die tabel hieronder lys die datatipes wat in VBA gebruik word met 'n beskrywing en reeks moontlike waardes:

Datatipe grootteBeskrywingReeks waardes
byte1 grepePositiewe heelgetalle; dikwels gebruik vir binêre datavan 0 na 255
Boole2 grepeKan óf Waar of Onwaar weesWaar of onwaar
Integer2 grepeHeelgetalle (geen breukdeel)van -32 tot +768
lank4 grepeGroot heelgetalle (geen breukdeel)от -2 147 483 648 до +2 147 483 647
enkele4 grepeEnkel presisie drywende punt nommervan -3.4e38 na +3.4e38
Dubbel8 grepeDubbel presisie drywende punt nommervan -1.8e308 na +1.8e308
Geld8 grepeSwaaipuntgetal, met 'n vaste aantal desimale plekkeот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
datum8 grepeDatum en tyd – Data van tipe Datum word voorgestel deur 'n drywende puntnommer. Die heelgetal deel van hierdie getal druk die datum uit, en die breukdeel druk die tyd uit.vanaf 1 Januarie 100 tot 31 Desember 9999
Object4 grepeVoorwerpverwysingEnige voorwerp verwysing
stringis besig om te veranderKarakterstel. Die String tipe kan van vaste of veranderlike lengte wees. Meer algemeen gebruik met veranderlike lengteVaste lengte – tot ongeveer 65 karakters. Veranderlike lengte – tot ongeveer 500 miljard karakters
Variantis besig om te veranderKan 'n datum, 'n float of 'n karakterstring bevat. Hierdie tipe word gebruik in gevalle waar dit nie vooraf bekend is watter tipe data ingevoer gaan word nie.Nommer – Dubbel, string – String

Natuurlik, deur die tabel hierbo te gebruik en die regte datatipe te kies, kan jy geheue meer ekonomies gebruik (kies byvoorbeeld die datatipe Integer plaas lank or enkele plaas Dubbel). As u egter meer kompakte datatipes gebruik, moet u versigtig wees dat u kode nie buitensporig groot waardes daarin probeer inpas nie.

Verklaar veranderlikes en konstante

Vertaler se nota: As ons oor veranderlikes in VBA praat, is dit die moeite werd om nog een baie belangrike punt te noem. As ons 'n veranderlike verklaar maar geen waarde daaraan toeken nie, dan word dit geïnisialiseer met 'n verstekwaarde:

• teksstringe word geïnisialiseer met leë stringe;

• getalle — waarde 0;

• tipe veranderlikes Boole - Onwaar;

• datums – 30 Desember 1899.

Voordat 'n veranderlike of konstante gebruik kan word, moet dit verklaar word. Om dit te doen, voeg die volgende eenvoudige reël kode by die makro:

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

In die bostaande reël kode Veranderlike_naam is die naam van die veranderlike wat in die kode gebruik sal word, en Datatipe is een van die datatipes uit die tabel wat 'n bietjie vroeër in hierdie artikel gegee is. Byvoorbeeld:

Dim sVAT_Rate As Enkel Dim i As Heelgetal

Konstante word op soortgelyke wyse verklaar, maar wanneer konstantes verklaar word, moet hul waarde onmiddellik aangedui word. Byvoorbeeld, soos volg:

Const iMaxCount = 5000 Const iMaxScore = 100

Dit is nie nodig om veranderlikes in Excel te verklaar nie. By verstek sal alle ingevoerde maar nie verklaarde veranderlikes in Excel die tipe hê Variant en sal beide numeriese en tekswaarde kan aanvaar.

Dus, die programmeerder kan die nuwe veranderlike te eniger tyd gebruik (selfs al is dit nie verklaar nie), en Excel sal dit as 'n veranderlike van tipe hanteer Variant. Daar is egter verskeie redes waarom dit nie gedoen moet word nie:

  1. Geheuegebruik en berekeningspoed. As jy nie 'n veranderlike met 'n aanduiding van die datatipe verklaar nie, sal dit by verstek op die tipe gestel word Variant. Hierdie datatipe gebruik meer geheue as ander datatipes. 'n Paar ekstra grepe per veranderlike klink dalk nie na veel nie, maar in die praktyk kan programme duisende veranderlikes hê (veral wanneer daar met skikkings gewerk word). Daarom is die ekstra geheue wat gebruik word deur veranderlikes soos Variant, in vergelyking met veranderlikes van tipe Integer or enkele, kan optel tot 'n aansienlike bedrag. Daarbenewens, bewerkings met veranderlikes van tipe Variant word baie stadiger uitgevoer as met veranderlikes van ander tipes, onderskeidelik 'n ekstra duisend tipe veranderlikes Variant kan berekeninge aansienlik vertraag.
  2. Voorkoming van tikfoute in veranderlike name. As alle veranderlikes verklaar word, kan die VBA-stelling gebruik word − Opsie eksplisiet (ons sal later daaroor praat) om alle onverklaarde veranderlikes te identifiseer. Dit skakel die voorkoms van 'n fout in die program uit as gevolg van 'n verkeerd geskryfde veranderlike naam. Byvoorbeeld, die gebruik van 'n veranderlike met die naam sVAT_Tarief, kan jy 'n tikfout maak en, deur 'n waarde aan hierdie veranderlike toe te ken, skryf: "VATRate = 0,175". Daar word verwag dat van nou af die veranderlike sVAT_Tarief moet die waarde 0,175 bevat – maar dit doen dit natuurlik nie. As die modus van verpligte verklaring van alle gebruikte veranderlikes geaktiveer is, sal die VBA-samesteller onmiddellik 'n fout aandui, aangesien dit nie die veranderlike sal vind nie VATR onder dié wat aangekondig is.
  3. Merk waardes uit wat nie ooreenstem met die verklaarde tipe van 'n veranderlike nie. As jy 'n veranderlike van 'n sekere tipe verklaar en probeer om data van 'n ander tipe daaraan toe te ken, sal jy 'n fout kry, wat, as dit nie reggestel word nie, die program kan laat ineenstort. Met die eerste oogopslag lyk dit dalk na 'n goeie rede om nie veranderlikes te verklaar nie, maar in werklikheid, as voorheen blyk dit dat een van die veranderlikes die verkeerde data ontvang het wat dit veronderstel was om te ontvang - soveel te beter! Andersins, as die program aanhou loop, kan die resultate verkeerd en onverwags wees, en dit sal baie moeiliker wees om die oorsaak van die foute te vind. Dit is ook moontlik dat die makro "suksesvol" uitgevoer sal word. As gevolg hiervan sal die fout ongemerk bly en werk sal voortgaan met verkeerde data!

In hierdie verband is dit wenslik om 'n verkeerde datatipe op te spoor en sulke foute in die kode so vroeg as moontlik reg te stel. Om hierdie redes word dit aanbeveel dat u alle veranderlikes verklaar wanneer u 'n VBA-makro skryf.

Opsie eksplisiet

operateur Opsie eksplisiet veroorsaak dat alle veranderlikes wat in VBA-kode gebruik sal word, verklaar word, en vlag alle onverklaarde veranderlikes as foute tydens samestelling (voordat kode-uitvoering begin). Dit is nie moeilik om hierdie operateur toe te pas nie - skryf net hierdie reël heel bo aan die VBA-lêer:

Option Explicit

As jy altyd wil insit Opsie eksplisiet aan die bokant van elke nuwe VBA-module wat geskep is, kan dit outomaties gedoen word. Om dit te doen, moet jy die opsie aktiveer Vereis veranderlike verklaring in die VBA-redigeerderinstellings.

Dit word so gedoen:

  • Klik in die Visual Basic Editor-kieslys gereedskap > Opsies
  • Maak die oortjie oop in die dialoog wat verskyn redakteur
  • Merk die kassie Vereis veranderlike verklaring en druk OK

Wanneer geaktiveer, die string Opsie eksplisiet sal outomaties aan die begin van elke nuwe module wat geskep word, ingevoeg word.

Omvang van veranderlikes en konstante

Elke verklaarde veranderlike of konstante het sy eie beperkte omvang, dit wil sê 'n beperkte deel van die program waarin hierdie veranderlike bestaan. Die omvang hang af van waar die verklaring van die veranderlike of konstante gemaak is. Neem byvoorbeeld die veranderlike sVAT_Tarief, wat in die funksie gebruik word Totale koste. Die volgende tabel bespreek twee opsies vir veranderlike omvang sVAT_Tariefin twee verskillende posisies in die module verklaar:

Opsie Eksplisiete Dim sVAT_Rate As Enkel Funksie Total_Cost() As Dubbel ... Einde Funksie
As die veranderlike sVAT_Tarief aan die begin van die module verklaar is, sal die omvang van hierdie veranderlike die hele module wees (dws die veranderlike sVAT_Tarief sal erken word deur alle prosedures in hierdie module).

Daarom, as in die funksie Totale koste veranderlike sVAT_Tarief 'n waarde sal toegeken word, dan sal die volgende funksie wat binne dieselfde module uitgevoer word, die veranderlike gebruik sVAT_Tarief met dieselfde betekenis.

As 'n funksie wat in 'n ander module geleë is egter genoem word, dan is die veranderlike daarvoor sVAT_Tarief sal nie bekend wees nie.

Opsie Eksplisiete Funksie Total_Cost() As Double Dim sVAT_Rate As Enkel ... Eindfunksie
As die veranderlike sVAT_Tarief verklaar aan die begin van die funksie Totale koste, dan sal die omvang daarvan slegs tot hierdie funksie beperk word (dws binne die funksie Totale koste, kan jy die veranderlike gebruik sVAT_Tarief, maar nie buite nie).

Wanneer jy probeer om te gebruik sVAT_Tarief in 'n ander prosedure sal die VBA-samesteller 'n fout rapporteer omdat hierdie veranderlike nie buite die funksie verklaar is nie Totale koste (mits die operateur gebruik word Opsie eksplisiet).

In die voorbeeld wat hierbo gewys word, word die veranderlike op modulevlak verklaar met die sleutelwoord Dowwe. Dit mag egter nodig wees dat verklaarde veranderlikes in ander modules gebruik kan word. In sulke gevalle, om 'n veranderlike in plaas van 'n sleutelwoord te verklaar Dowwe sleutelwoord gebruik moet word Openbare.

Terloops, om 'n veranderlike op modulevlak te verklaar, in plaas van die sleutelwoord Dowwe sleutelwoord kan gebruik word Privaat, wat aandui dat hierdie veranderlike slegs bedoel is vir gebruik in die huidige module.

Jy kan ook sleutelwoorde gebruik om konstantes te verklaar. Openbare и Privaat, maar nie in plaas van die sleutelwoord nie konst, daarmee saam.

Die volgende voorbeelde toon die gebruik van sleutelwoorde Openbare и Privaat toegepas op veranderlikes en konstantes.

Opsie Eksplisiete publieke sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
In hierdie voorbeeld, die sleutelwoord Openbare gebruik om 'n veranderlike te verklaar sVAT_Tarief en konstantes iMax_Count. Die omvang van elemente wat op hierdie manier verklaar word, sal die hele huidige projek wees.

Dit beteken dat sVAT_Tarief и iMax_Count sal in enige projekmodule beskikbaar wees.

Opsie Eksplisiete Privaat sVAT_Rate As Enkel Privaat Konst iMax_Count = 5000 ...    
In hierdie voorbeeld, om 'n veranderlike te verklaar sVAT_Tarief en konstantes iMax_Count sleutelwoord gebruik Privaat. Die omvang van hierdie elemente is die huidige module.

Dit beteken dat sVAT_Tarief и iMax_Count sal beskikbaar wees in alle prosedures van die huidige module, maar sal nie beskikbaar wees vir prosedures in ander modules nie.

Lewer Kommentaar