Variabelen en constanten in VBA

In VBA worden, net als in elke andere programmeertaal, variabelen en constanten gebruikt om waarden op te slaan. Zoals de naam al aangeeft, kunnen variabelen veranderen, terwijl constanten vaste waarden opslaan.

Bijvoorbeeld een constante Pi slaat de waarde 3,14159265 op... Het getal "Pi" verandert niet tijdens de uitvoering van het programma, maar het is nog steeds handiger om zo'n waarde als een constante op te slaan.

Tegelijkertijd kunnen we de variabele sVAT_Tarief om het btw-tarief op gekochte goederen op te slaan. Variabele waarde sVAT_Tarief kan variëren afhankelijk van het gekochte product.

Gegevenstypen

Alle variabelen en constanten zijn van een bepaald gegevenstype. De onderstaande tabel geeft een overzicht van de gegevenstypen die in VBA worden gebruikt met een beschrijving en een bereik van mogelijke waarden:

Data type MaatOmschrijvingBereik van waarden
Byte1 bytesPositieve gehele getallen; vaak gebruikt voor binaire gegevensvan 0 naar 255
Boolean2 bytesKan waar of onwaar zijnWaar of niet waar
Geheel getal2 bytesGehele getallen (geen breukdeel)van -32 tot +768
lang4 bytesGrote gehele getallen (geen breukdeel)от -2 147 483 648 до +2 147 483 647
single4 bytesEnkele precisie drijvende-kommagetalvan -3.4e38 tot +3.4e38
Dubbel8 bytesDrijvende-kommagetal met dubbele precisievan -1.8e308 tot +1.8e308
Valuta8 bytesDrijvende-kommagetal, met een vast aantal decimalenот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Datum8 bytesDatum en tijd – Gegevens van het type Datum wordt weergegeven door een getal met drijvende komma. Het gehele deel van dit getal drukt de datum uit en het fractionele deel drukt de tijd uit.van 1 januari 100 tot 31 december 9999
Object4 bytesObjectreferentieElke objectreferentie
DraadverandertKarakterset. Het String-type kan een vaste of variabele lengte hebben. Vaker gebruikt met variabele lengteVaste lengte – tot ongeveer 65 tekens. Variabele lengte – tot ongeveer 500 miljard tekens
VariantverandertKan een datum, een float of een tekenreeks bevatten. Dit type wordt gebruikt in gevallen waarin vooraf niet bekend is welk type gegevens worden ingevoerd.Nummer – Dubbel, string – String

Door de bovenstaande tabel te gebruiken en het juiste datatype te kiezen, kunt u uiteraard zuiniger omgaan met geheugen (kies bijvoorbeeld het datatype Geheel getal verkrijgen in plaats daarvan lang or single verkrijgen in plaats daarvan Dubbel). Wanneer u echter compactere gegevenstypen gebruikt, moet u oppassen dat uw code er geen onevenredig grote waarden in probeert te passen.

Variabelen en constanten declareren

Opmerking van de vertaler: Over variabelen in VBA gesproken, het is de moeite waard om nog een heel belangrijk punt te noemen. Als we een variabele declareren maar er geen waarde aan toekennen, wordt deze geïnitialiseerd met een standaardwaarde:

• tekststrings worden geïnitialiseerd met lege strings;

• getallen — waarde 0;

• typ variabelen Boolean — Vals;

• data – 30 december 1899.

Voordat een variabele of constante kan worden gebruikt, moet deze worden gedeclareerd. Om dit te doen, voegt u de volgende eenvoudige regel code toe aan de macro:

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

In de bovenstaande regel code Variabele_naam is de naam van de variabele die in de code zal worden gebruikt, en Data type is een van de gegevenstypen uit de tabel die iets eerder in dit artikel is gegeven. Bijvoorbeeld:

Dim sVAT_Rate As Single Dim i As Integer

Constanten worden op dezelfde manier gedeclareerd, maar bij het declareren van constanten moet hun waarde onmiddellijk worden aangegeven. Bijvoorbeeld als volgt:

Const iMaxCount = 5000 Const iMaxScore = 100

Het is niet nodig om variabelen in Excel te declareren. Standaard hebben alle ingevoerde maar niet gedeclareerde variabelen in Excel het type Variant en kan zowel numerieke als tekstwaarden accepteren.

De programmeur kan de nieuwe variabele dus op elk moment gebruiken (zelfs als deze niet is gedeclareerd), en Excel zal deze behandelen als een variabele van het type Variant. Er zijn echter verschillende redenen om dit niet te doen:

  1. Geheugengebruik en rekensnelheid. Als u een variabele niet declareert met een indicatie van het gegevenstype, wordt deze standaard ingesteld op het type Variant. Dit datatype gebruikt meer geheugen dan andere datatypes. Een paar extra bytes per variabele klinkt misschien niet zo veel, maar in de praktijk kunnen programma's duizenden variabelen hebben (vooral als je met arrays werkt). Daarom is het extra geheugen dat wordt gebruikt door variabelen zoals Variant, vergeleken met variabelen van het type Geheel getal or single, kan oplopen tot een aanzienlijk bedrag. Bovendien kunnen bewerkingen met variabelen van het type Variant worden veel langzamer uitgevoerd dan bij variabelen van andere typen, respectievelijk duizend extra variabelen van het type Variant kan berekeningen aanzienlijk vertragen.
  2. Voorkomen van typefouten in variabelenamen. Als alle variabelen zijn gedeclareerd, kan het VBA-statement worden gebruikt − Optie Expliciet (we zullen er later over praten) om alle niet-gedeclareerde variabelen te identificeren. Dit elimineert het verschijnen van een fout in het programma als gevolg van een onjuist geschreven variabelenaam. Als u bijvoorbeeld een variabele gebruikt met de naam sVAT_Tarief, kunt u een typefout maken en, door aan deze variabele een waarde toe te kennen, schrijven: “VATRate = 0,175”. Verwacht wordt dat vanaf nu de variabele sVAT_Tarief moet de waarde 0,175 bevatten – maar dat doet het natuurlijk niet. Als de modus van verplichte declaratie van alle gebruikte variabelen is ingeschakeld, geeft de VBA-compiler onmiddellijk een fout aan, omdat deze de variabele niet zal vinden BTW-tarief onder de aangekondigde.
  3. Waarden markeren die niet overeenkomen met het gedeclareerde type van een variabele. Als u een variabele van een bepaald type declareert en er gegevens van een ander type aan probeert toe te kennen, krijgt u een foutmelding die, indien niet gecorrigeerd, het programma kan laten crashen. Op het eerste gezicht lijkt dit misschien een goede reden om variabelen niet te declareren, maar in feite blijkt dat een van de variabelen de verkeerde gegevens heeft ontvangen die hij had moeten ontvangen - des te beter! Anders, als het programma blijft draaien, kunnen de resultaten onjuist en onverwacht zijn en zal het veel moeilijker zijn om de oorzaak van de fouten te vinden. Het is ook mogelijk dat de macro "met succes" wordt uitgevoerd. Hierdoor blijft de fout onopgemerkt en wordt er verder gewerkt met onjuiste gegevens!

In dit opzicht is het wenselijk om een ​​onjuist gegevenstype te detecteren en dergelijke fouten in de code zo vroeg mogelijk te corrigeren. Om deze redenen wordt aanbevolen dat u alle variabelen declareert bij het schrijven van een VBA-macro.

Optie Expliciet

Operator Optie Expliciet zorgt ervoor dat alle variabelen die in VBA-code worden gebruikt, worden gedeclareerd en markeert alle niet-gedeclareerde variabelen als fouten tijdens het compileren (voordat de uitvoering van de code begint). Het toepassen van deze operator is niet moeilijk - schrijf deze regel helemaal bovenaan het VBA-bestand:

Option Explicit

Als je altijd wilt invoegen Optie Expliciet naar de top van elke nieuwe VBA-module die wordt gemaakt, kan dit automatisch worden gedaan. Om dit te doen, moet u de optie inschakelen Variabele declaratie vereisen in de instellingen van de VBA-editor.

Dit wordt als volgt gedaan:

  • Klik in het menu Visual Basic Editor op tools > Opties
  • In het dialoogvenster dat verschijnt, opent u het tabblad editor
  • Vink het vakje aan Variabele declaratie vereisen en druk op OK

Indien ingeschakeld, wordt de tekenreeks Optie Expliciet wordt automatisch ingevoegd aan het begin van elke nieuwe module die wordt gemaakt.

Bereik van variabelen en constanten

Elke gedeclareerde variabele of constante heeft zijn eigen beperkte bereik, dat wil zeggen een beperkt deel van het programma waarin deze variabele voorkomt. Het bereik hangt af van waar de declaratie van de variabele of constante is gedaan. Neem bijvoorbeeld de variabele sVAT_Tarief, die wordt gebruikt in de functie Totale prijs. In de volgende tabel worden twee opties voor variabele scoping besproken: sVAT_Tariefgedeclareerd in twee verschillende posities in de module:

Optie Expliciete Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function
Als de variabele sVAT_Tarief helemaal aan het begin van de module gedeclareerd, dan zal het bereik van deze variabele de hele module zijn (dwz de variabele sVAT_Tarief wordt herkend door alle procedures in deze module).

Daarom, als in de functie Totale prijs variabele sVAT_Tarief krijgt een bepaalde waarde toegewezen, dan zal de volgende functie die binnen dezelfde module wordt uitgevoerd de variabele gebruiken sVAT_Tarief met dezelfde betekenis.

Als echter een functie in een andere module wordt aangeroepen, dan is daarvoor de variabele sVAT_Tarief zal niet bekend zijn.

Optie Expliciete functie Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Als de variabele sVAT_Tarief gedeclareerd aan het begin van de functie Totale prijs, dan is de reikwijdte ervan alleen beperkt tot deze functie (dwz binnen de functie Totale prijs, u kunt de variabele . gebruiken sVAT_Tarief, maar niet buiten).

Bij het proberen te gebruiken sVAT_Tarief in een andere procedure zal de VBA-compiler een fout rapporteren omdat deze variabele niet buiten de functie is gedeclareerd Totale prijs (op voorwaarde dat de operator wordt gebruikt) Optie Expliciet).

In het bovenstaande voorbeeld wordt de variabele gedeclareerd op moduleniveau met het sleutelwoord Schemerig. Het kan echter nodig zijn dat gedeclareerde variabelen in andere modules kunnen worden gebruikt. In dergelijke gevallen, om een ​​variabele te declareren in plaats van een trefwoord Schemerig trefwoord moet worden gebruikt Publieke.

Trouwens, om een ​​variabele op moduleniveau te declareren, in plaats van het sleutelwoord Schemerig trefwoord kan worden gebruikt Privé, wat aangeeft dat deze variabele alleen bedoeld is voor gebruik in de huidige module.

U kunt ook trefwoorden gebruiken om constanten te declareren. Publieke и Privé, maar niet in plaats van het trefwoord const, mee.

De volgende voorbeelden tonen het gebruik van trefwoorden Publieke и Privé toegepast op variabelen en constanten.

Optie Expliciete openbare sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
In dit voorbeeld is het trefwoord Publieke gebruikt om een ​​variabele te declareren sVAT_Tarief en constanten iMax_Count. De reikwijdte van de op deze manier gedeclareerde elementen zal het gehele huidige project zijn.

Dit betekent dat sVAT_Tarief и iMax_Count zal beschikbaar zijn in elke projectmodule.

Optie Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
In dit voorbeeld, om een ​​variabele te declareren sVAT_Tarief en constanten iMax_Count trefwoord gebruikt Privé. De reikwijdte van deze elementen is de huidige module.

Dit betekent dat sVAT_Tarief и iMax_Count zal beschikbaar zijn in alle procedures van de huidige module, maar zal niet beschikbaar zijn voor procedures in andere modules.

Laat een reactie achter