Variabler og konstanter i VBA

I VBA, som i ethvert andet programmeringssprog, bruges variabler og konstanter til at gemme alle værdier. Som navnet antyder, kan variabler ændre sig, mens konstanter gemmer faste værdier.

For eksempel en konstant Pi gemmer værdien 3,14159265... Tallet "Pi" ændres ikke under afviklingen af ​​programmet, men det er stadig mere bekvemt at gemme en sådan værdi som en konstant.

Samtidig kan vi bruge variablen sVAT_Rate at opbevare momssatsen på indkøbte varer. Variabel værdi sVAT_Rate kan variere afhængigt af det købte produkt.

Datatyper

Alle variabler og konstanter er af en bestemt datatype. Tabellen nedenfor viser de datatyper, der bruges i VBA med en beskrivelse og række af mulige værdier:

Datatype StørrelseBeskrivelseVærdiområde
Byte1 bytesPositive heltal; bruges ofte til binære datafra 0 til 255
Boolesk2 bytesKan være enten sandt eller falskSandt eller falsk
Integer2 bytesHele tal (ingen brøkdel)fra -32 til +768
Lang4 bytesStore heltal (ingen brøkdel)от -2 147 483 648 до +2 147 483 647
enkelt4 bytesEnkelt præcision flydende kommanummerfra -3.4e38 til +3.4e38
Dobbelt8 bytesDobbelt præcision flydende kommanummerfra -1.8e308 til +1.8e308
Valuta8 bytesFlydende kommatal, med et fast antal decimalerот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Dato8 bytesDato og klokkeslæt – Data af typen Dato er repræsenteret ved et flydende kommatal. Heltalsdelen af ​​dette tal udtrykker datoen, og brøkdelen udtrykker tiden.fra 1. januar 100 til 31. december 9999
Object4 bytesObjektreferenceEnhver objektreference
Stringændrer sigKaraktersæt. String-typen kan være af fast eller variabel længde. Mere almindeligt brugt med variabel længdeFast længde – op til cirka 65 tegn. Variabel længde – op til cirka 500 milliarder tegn
Variantændrer sigKan indeholde en dato, en flyder eller en tegnstreng. Denne type bruges i de tilfælde, hvor det ikke på forhånd er kendt, hvilken type data der vil blive indtastet.Nummer – Dobbelt, streng – String

Ved at bruge tabellen ovenfor og vælge den rigtige datatype kan du naturligvis bruge hukommelsen mere økonomisk (vælg f.eks. datatypen Integer i stedet Lang or enkelt i stedet Dobbelt). Men når du bruger mere kompakte datatyper, skal du passe på, at din kode ikke forsøger at passe uforholdsmæssigt store værdier ind i dem.

Erklæring af variabler og konstanter

Oversætterens note: Når vi taler om variabler i VBA, er det værd at nævne endnu et meget vigtigt punkt. Hvis vi erklærer en variabel, men ikke tildeler nogen værdi til den, initialiseres den med en standardværdi:

• tekststrenge initialiseres med tomme strenge;

• tal — værdi 0;

• typevariabler Boolesk - Falsk;

• datoer – 30. december 1899.

Før en variabel eller konstant kan bruges, skal den deklareres. For at gøre dette skal du tilføje følgende enkle kodelinje til makroen:

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

I ovenstående kodelinje Variabel_navn er navnet på den variabel, der vil blive brugt i koden, og Datatype er en af ​​datatyperne fra tabellen givet lidt tidligere i denne artikel. For eksempel:

Dim sVAT_Rate As Single Dim i As Integer

Konstanter erklæres på samme måde, men når konstanter erklæres, skal deres værdi straks angives. For eksempel sådan her:

Const iMaxCount = 5000 Const iMaxScore = 100

Det er ikke nødvendigt at deklarere variabler i Excel. Som standard vil alle indtastede men ikke erklærede variabler i Excel have typen Variant og vil være i stand til at acceptere både numerisk og tekstværdi.

Programmøren kan således bruge den nye variabel til enhver tid (selvom den ikke er blevet erklæret), og Excel vil behandle den som en variabel af typen Variant. Der er dog flere grunde til, at dette ikke bør gøres:

  1. Hukommelsesbrug og beregningshastighed. Hvis du ikke erklærer en variabel med en indikation af datatypen, vil den som standard være indstillet til typen Variant. Denne datatype bruger mere hukommelse end andre datatyper. Et par ekstra bytes pr. variabel lyder måske ikke af meget, men i praksis kan programmer have tusindvis af variabler (især når man arbejder med arrays). Derfor er den ekstra hukommelse, der bruges af variabler som Variant, sammenlignet med variabler af typen Integer or enkelt, kan udgøre et betydeligt beløb. Derudover operationer med variabler af typen Variant udføres meget langsommere end med variabler af andre typer, henholdsvis et ekstra tusind variabler af typen Variant kan bremse beregningerne betydeligt.
  2. Forebyggelse af tastefejl i variabelnavne. Hvis alle variable er deklareret, kan VBA-sætningen bruges − Mulighed for eksplicit (vi vil tale om det senere) for at identificere alle ikke-deklarerede variabler. Dette eliminerer udseendet af en fejl i programmet som følge af et forkert skrevet variabelnavn. For eksempel ved at bruge en variabel med navnet sVAT_Rate, kan du lave en tastefejl og ved at tildele en værdi til denne variabel skrive: "VATRate = 0,175". Det forventes, at fra nu af vil variablen sVAT_Rate skal indeholde værdien 0,175 – men det gør den selvfølgelig ikke. Hvis tilstanden med obligatorisk erklæring af alle brugte variable er aktiveret, vil VBA-kompileren straks indikere en fejl, da den ikke finder variablen moms blandt de annoncerede.
  3. Fremhæv værdier, der ikke matcher den deklarerede type af en variabel. Hvis du erklærer en variabel af en bestemt type og forsøger at tildele data af en anden type til den, vil du få en fejl, som, hvis den ikke rettes, kan få programmet til at gå ned. Umiddelbart kan det virke som en god grund til ikke at deklarere variabler, men faktisk end før viser det sig, at en af ​​variablerne modtog de forkerte data, som den skulle modtage – så meget desto bedre! Ellers, hvis programmet fortsætter med at køre, kan resultaterne være forkerte og uventede, og det vil være meget sværere at finde årsagen til fejlene. Det er også muligt, at makroen udføres "med succes". Som et resultat vil fejlen forblive ubemærket, og arbejdet vil fortsætte med forkerte data!

I denne henseende er det ønskeligt at opdage en forkert datatype og rette sådanne fejl i koden så tidligt som muligt. Af disse grunde anbefales det, at du erklærer alle variabler, når du skriver en VBA-makro.

Mulighed for eksplicit

Operatør Mulighed for eksplicit bevirker, at alle variabler, der vil blive brugt i VBA-kode, bliver erklæret, og markerer alle ikke-erklærede variable som fejl under kompilering (før kodeudførelse starter). Det er ikke svært at anvende denne operator - bare skriv denne linje øverst i VBA-filen:

Option Explicit

Hvis du vil altid indsætte Mulighed for eksplicit til toppen af ​​hvert nyt VBA-modul, der oprettes, kan dette gøres automatisk. For at gøre dette skal du aktivere indstillingen Kræv variabel erklæring i VBA-editorens indstillinger.

Dette gøres sådan:

  • Klik på i menuen Visual Basic Editor værktøjer > Indstillinger
  • Åbn fanen i den dialog, der vises editor
  • Marker afkrydsningsfeltet Kræv variabel erklæring og tryk OK

Når den er aktiveret, vil strengen Mulighed for eksplicit vil automatisk blive indsat i begyndelsen af ​​hvert nyt modul, der oprettes.

Omfang af variabler og konstanter

Hver erklæret variabel eller konstant har sit eget begrænsede omfang, det vil sige en begrænset del af programmet, hvori denne variabel findes. Omfanget afhænger af, hvor deklarationen af ​​variablen eller konstanten blev foretaget. Tag for eksempel variablen sVAT_Rate, som bruges i funktionen Udgifter i alt. Følgende tabel diskuterer to muligheder for variabel omfang sVAT_Rateerklæret i to forskellige positioner i modulet:

Option Eksplicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function
Hvis variablen sVAT_Rate erklæret helt i begyndelsen af ​​modulet, så vil omfanget af denne variabel være hele modulet (dvs. variablen sVAT_Rate vil blive genkendt af alle procedurer i dette modul).

Derfor, hvis i funktionen Udgifter i alt variabel sVAT_Rate vil blive tildelt en eller anden værdi, så vil den næste funktion, der udføres inden for samme modul, bruge variablen sVAT_Rate med samme betydning.

Men hvis en funktion placeret i et andet modul kaldes, så er variablen for den sVAT_Rate vil ikke være kendt.

Option Eksplicit funktion Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Hvis variablen sVAT_Rate erklæret i begyndelsen af ​​funktionen Udgifter i alt, så vil dens omfang kun være begrænset til denne funktion (dvs. inden for funktionen Udgifter i alt, kan du bruge variablen sVAT_Rate, men ikke udenfor).

Når du prøver at bruge sVAT_Rate i en anden procedure vil VBA-kompileren rapportere en fejl, fordi denne variabel ikke blev erklæret uden for funktionen Udgifter i alt (forudsat at operatøren bruges Mulighed for eksplicit).

I eksemplet vist ovenfor er variablen erklæret på modulniveau med nøgleordet Dim. Det kan dog være nødvendigt, at deklarerede variabler kan bruges i andre moduler. I sådanne tilfælde at erklære en variabel i stedet for et nøgleord Dim søgeord skal bruges offentlige.

Forresten, for at erklære en variabel på modulniveau, i stedet for nøgleordet Dim søgeord kan bruges Privat, hvilket indikerer, at denne variabel kun er beregnet til brug i det aktuelle modul.

Du kan også bruge nøgleord til at erklære konstanter. offentlige и Privat, men ikke i stedet for søgeordet Const, sammen med det.

Følgende eksempler viser brugen af ​​nøgleord offentlige и Privat anvendt på variabler og konstanter.

Option Eksplicit offentlig sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
I dette eksempel er nøgleordet offentlige bruges til at erklære en variabel sVAT_Rate og konstanter iMax_Count. Omfanget af elementer deklareret på denne måde vil være hele det aktuelle projekt.

Dette betyder, at sVAT_Rate и iMax_Count vil være tilgængelig i ethvert projektmodul.

Option Eksplicit privat sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
I dette eksempel for at erklære en variabel sVAT_Rate og konstanter iMax_Count anvendte søgeord Privat. Omfanget af disse elementer er det aktuelle modul.

Dette betyder, at sVAT_Rate и iMax_Count vil være tilgængelig i alle procedurer i det nuværende modul, men vil ikke være tilgængelig for procedurer i andre moduler.

Giv en kommentar