Variabler og konstanter i VBA

I VBA, som i alle andre programmeringsspråk, brukes variabler og konstanter til å lagre eventuelle verdier. Som navnet tilsier, kan variabler endres, mens konstanter lagrer faste verdier.

For eksempel en konstant Pi lagrer verdien 3,14159265... Tallet "Pi" vil ikke endres under kjøringen av programmet, men det er fortsatt mer praktisk å lagre en slik verdi som en konstant.

Samtidig kan vi bruke variabelen sVAT_Rate å lagre momssatsen på innkjøpte varer. Variabel verdi sVAT_Rate kan variere avhengig av produktet som er kjøpt.

Datatyper

Alle variabler og konstanter er av en bestemt datatype. Tabellen nedenfor viser datatypene som brukes i VBA med en beskrivelse og et utvalg av mulige verdier:

Data-type StørrelseBeskrivelseVerdiområde
Byte1 bytesPositive heltall; ofte brukt for binære datafra 0 til 255
boolean2 bytesKan være enten sant eller usantSant eller usant
Heltall2 bytesHele tall (ingen brøkdel)fra -32 til +768
Lang4 bytesStore heltall (ingen brøkdel)от -2 147 483 648 до +2 147 483 647
enkelt4 bytesEnkelt presisjons flyttallnummerfra -3.4e38 til +3.4e38
Dobbel8 bytesDobbel presisjons flyttallnummerfra -1.8e308 til +1.8e308
valuta8 bytesFlytende kommanummer, med et fast antall desimalerот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Dato8 bytesDato og klokkeslett – Data av typen Dato er representert med et flyttall. Heltallsdelen av dette tallet uttrykker datoen, og brøkdelen uttrykker klokkeslettet.fra 1. januar 100 til 31. desember 9999
Objekt4 bytesObjektreferanseEnhver objektreferanse
Stringendrer segKaraktersett. Stringtypen kan være av fast eller variabel lengde. Mer vanlig brukt med variabel lengdeFast lengde – opptil ca. 65 tegn. Variabel lengde – opptil omtrent 500 milliarder tegn
variantendrer segKan inneholde en dato, en flyte eller en tegnstreng. Denne typen brukes i tilfeller hvor det ikke er kjent på forhånd hvilken type data som skal legges inn.Tall – dobbel, streng – streng

Ved å bruke tabellen ovenfor og velge riktig datatype kan du selvsagt bruke minnet mer økonomisk (velg for eksempel datatypen Heltall i stedet Lang or enkelt i stedet Dobbel). Men når du bruker mer kompakte datatyper, må du være forsiktig med at koden ikke prøver å passe uforholdsmessig store verdier inn i dem.

Erklære variabler og konstanter

Oversetterens merknad: Når vi snakker om variabler i VBA, er det verdt å nevne et annet veldig viktig poeng. Hvis vi erklærer en variabel, men ikke tildeler noen verdi til den, initialiseres den med en standardverdi:

• tekststrenger initialiseres med tomme strenger;

• tall — verdi 0;

• typevariabler boolean - Falsk;

• datoer – 30. desember 1899.

Før en variabel eller konstant kan brukes, må den deklareres. For å gjøre dette, legg til følgende enkle kodelinje i makroen:

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

I kodelinjen ovenfor Variabel_navn er navnet på variabelen som skal brukes i koden, og Data-type er en av datatypene fra tabellen gitt litt tidligere i denne artikkelen. For eksempel:

Dim sVAT_Rate As Single Dim i As Integer

Konstanter deklareres på samme måte, men når konstanter deklareres, må verdien deres umiddelbart angis. For eksempel slik:

Const iMaxCount = 5000 Const iMaxScore = 100

Det er ikke nødvendig å deklarere variabler i Excel. Som standard vil alle angitte men ikke deklarerte variabler i Excel ha typen variant og vil kunne akseptere både numerisk og tekstverdi.

Dermed kan programmereren bruke den nye variabelen når som helst (selv om den ikke er deklarert), og Excel vil behandle den som en variabel av typen variant. Det er imidlertid flere grunner til at dette ikke bør gjøres:

  1. Minnebruk og beregningshastighet. Hvis du ikke deklarerer en variabel med en indikasjon på datatypen, vil den som standard bli satt til typen variant. Denne datatypen bruker mer minne enn andre datatyper. Noen ekstra byte per variabel høres kanskje ikke så mye ut, men i praksis kan programmer ha tusenvis av variabler (spesielt når du arbeider med arrays). Derfor er det ekstra minnet som brukes av variabler som variant, sammenlignet med variabler av typen Heltall or enkelt, kan utgjøre et betydelig beløp. I tillegg operasjoner med variabler av typen variant utføres mye langsommere enn med variabler av andre typer, henholdsvis en ekstra tusen variabler av typen variant kan redusere beregningene betydelig.
  2. Forebygging av skrivefeil i variabelnavn. Hvis alle variabler er deklarert, kan VBA-setningen brukes − Alternativ Eksplisitt (vi vil snakke om det senere) for å identifisere alle ikke-oppgitte variabler. Dette eliminerer utseendet til en feil i programmet som følge av feil skrevet variabelnavn. For eksempel ved å bruke en variabel kalt sVAT_Rate, kan du gjøre en skrivefeil og tilordne en verdi til denne variabelen, skrive: "VATRate = 0,175". Det forventes at fra nå av vil variabelen sVAT_Rate skal inneholde verdien 0,175 – men det gjør den selvfølgelig ikke. Hvis modusen for obligatorisk deklarering av alle brukte variabler er aktivert, vil VBA-kompilatoren umiddelbart indikere en feil, siden den ikke finner variabelen VATR blant de annonserte.
  3. Fremheve verdier som ikke samsvarer med den deklarerte typen til en variabel. Hvis du deklarerer en variabel av en bestemt type og prøver å tilordne data av en annen type til den, vil du få en feil, som, hvis den ikke rettes, kan føre til at programmet krasjer. Ved første øyekast kan dette virke som en god grunn til å ikke deklarere variabler, men faktisk enn før viser det seg at en av variablene mottok feil data som den skulle motta – så mye desto bedre! Ellers, hvis programmet fortsetter å kjøre, kan resultatene være feil og uventede, og det vil være mye vanskeligere å finne årsaken til feilene. Det er også mulig at makroen blir "vellykket" utført. Som et resultat vil feilen gå ubemerket hen og arbeidet vil fortsette med feil data!

I denne forbindelse er det ønskelig å oppdage en feil datatype og rette opp slike feil i koden så tidlig som mulig. Av disse grunnene anbefales det at du deklarerer alle variabler når du skriver en VBA-makro.

Alternativ Eksplisitt

operatør Alternativ Eksplisitt fører til at alle variabler som skal brukes i VBA-kode blir deklarert, og flagger alle ikke-erklærte variabler som feil under kompilering (før kodekjøring starter). Det er ikke vanskelig å bruke denne operatøren – bare skriv denne linjen helt øverst i VBA-filen:

Option Explicit

Hvis du vil alltid sette inn Alternativ Eksplisitt til toppen av hver nye VBA-modul som opprettes, kan dette gjøres automatisk. For å gjøre dette, må du aktivere alternativet Krev variabel erklæring i VBA-redigeringsinnstillingene.

Dette gjøres slik:

  • Fra Visual Basic Editor-menyen klikker du verktøy > alternativer
  • Åpne fanen i dialogboksen som vises editor
  • Merk av i ruten Krev variabel erklæring og trykk OK

Når aktivert, strengen Alternativ Eksplisitt vil automatisk settes inn i begynnelsen av hver ny modul som opprettes.

Omfang av variabler og konstanter

Hver deklarerte variabel eller konstant har sitt eget begrensede omfang, det vil si en begrenset del av programmet der denne variabelen eksisterer. Omfanget avhenger av hvor deklarasjonen av variabelen eller konstanten ble gjort. Ta for eksempel variabelen sVAT_Rate, som brukes i funksjonen Totalkostnad. Tabellen nedenfor diskuterer to alternativer for variabel omfang sVAT_Rateerklært i to forskjellige posisjoner i modulen:

Alternativ Eksplisitt Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function
Hvis variabelen sVAT_Rate deklarert helt i begynnelsen av modulen, vil omfanget av denne variabelen være hele modulen (dvs. variabelen sVAT_Rate vil bli gjenkjent av alle prosedyrer i denne modulen).

Derfor, hvis i funksjonen Totalkostnad variabel sVAT_Rate vil bli tildelt en verdi, så vil den neste funksjonen som utføres i samme modul bruke variabelen sVAT_Rate med samme betydning.

Men hvis en funksjon som ligger i en annen modul kalles, så er variabelen for den sVAT_Rate vil ikke bli kjent.

Alternativ Eksplisitt funksjon Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Hvis variabelen sVAT_Rate erklært i begynnelsen av funksjonen Totalkostnad, vil dens omfang bare være begrenset til denne funksjonen (dvs. innenfor funksjonen Totalkostnad, kan du bruke variabelen sVAT_Rate, men ikke utenfor).

Når du prøver å bruke sVAT_Rate i en annen prosedyre vil VBA-kompilatoren rapportere en feil fordi denne variabelen ikke ble erklært utenfor funksjonen Totalkostnad (forutsatt at operatøren brukes Alternativ Eksplisitt).

I eksemplet vist ovenfor er variabelen deklarert på modulnivå med nøkkelordet Dim. Det kan imidlertid være nødvendig at deklarerte variabler kan brukes i andre moduler. I slike tilfeller, å erklære en variabel i stedet for et nøkkelord Dim nøkkelord må brukes offentlig.

Forresten, for å erklære en variabel på modulnivå, i stedet for nøkkelordet Dim nøkkelord kan brukes Privat, som indikerer at denne variabelen kun er ment for bruk i gjeldende modul.

Du kan også bruke nøkkelord for å erklære konstanter. offentlig и Privat, men ikke i stedet for søkeordet Konst, sammen med det.

Følgende eksempler viser bruken av nøkkelord offentlig и Privat brukt på variabler og konstanter.

Alternativ Eksplisitt offentlig sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
I dette eksemplet er nøkkelordet offentlig brukes til å deklarere en variabel sVAT_Rate og konstanter iMax_Count. Omfanget av elementer deklarert på denne måten vil være hele det aktuelle prosjektet.

Dette betyr at sVAT_Rate и iMax_Count vil være tilgjengelig i enhver prosjektmodul.

Alternativ Eksplisitt privat sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
I dette eksemplet, for å erklære en variabel sVAT_Rate og konstanter iMax_Count søkeord brukt Privat. Omfanget av disse elementene er gjeldende modul.

Dette betyr at sVAT_Rate и iMax_Count vil være tilgjengelig i alle prosedyrer i gjeldende modul, men vil ikke være tilgjengelig for prosedyrer i andre moduler.

Legg igjen en kommentar