Förstå Excel VBA -datatyper (variabler och konstanter)

I Excel VBA skulle du ofta behöva använda variabler och konstanter.

När du arbetar med VBA är en variabel en plats i datorns minne där du kan lagra data. Vilken typ av data du kan lagra i en variabel beror på datatypen för variabeln.

Till exempel, om du vill lagra heltal i en variabel, skulle din datatyp vara "Heltal" och om du vill lagra text skulle din datatyp vara "String".

Mer om datatyper senare i den här självstudien.

Medan en variabels värde ändras när koden pågår, håller en konstant ett värde som aldrig ändras. Som en god kodning bör du definiera datatypen för båda - variabel och konstant.

Varför använda variabler i VBA?

När du kodar i VBA behöver du variabler som du kan använda för att hålla ett värde.

Fördelen med att använda en variabel är att du kan ändra variabelns värde i koden och fortsätta använda den i koden.

Till exempel nedan är en kod som lägger till de första 10 positiva talen och sedan visar resultatet i en meddelanderuta:

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

Det finns tre variabler i koden ovan - Var, i, och k.

Ovanstående kod använder en For Next -slinga där alla dessa tre variabler ändras när looparna slutförs.

Nyttan av en variabel ligger i det faktum att den kan ändras medan din kod pågår.

Nedan följer några regler att tänka på när namnen på variablerna i VBA:

  1. Du kan använda alfabet, siffror och skiljetecken, men det första numret måste vara ett alfabet.
  2. Du kan inte använda mellanslag eller punkt i variabelnamnet. Du kan dock använda ett understrykningstecken för att göra variabelnamnen mer läsbara (t.ex. Interest_Rate)
  3. Du kan inte använda specialtecken (#, $, %, & eller!) I variabelnamn
  4. VBA skiljer inte mellan fallet i variabelnamnet. Så "Ränta" och "ränta" är desamma för VBA. Du kan använda mixed case för att göra variablerna mer läsbara.
  5. VBA har några reserverade namn som du kan använda för ett variabelnamn. Till exempel kan du inte använda ordet "Nästa" som ett variabelnamn, eftersom det är ett reserverat namn för For Next -slingan.
  6. Ditt variabelnamn kan vara upp till 254 tecken långt.

Datatyp av variabler

För att utnyttja variabler på bästa sätt är det bra att ange datatypen för variabeln.

Datatypen du tilldelar en variabel beror på vilken typ av data du vill att variabeln ska hålla.

Nedan finns en tabell som visar alla tillgängliga datatyper du kan använda i Excel VBA:

Data typ Byte används Värdeområde
Byte 1 byte 0 till 255
Boolean 2 byte Sant eller falskt
Heltal 2 byte -32 768 till 32 767
Långt (långt heltal) 4 bytes -2 147 483 648 till 2 147 483 647
Enda 4 bytes -3.402823E38 till -1.401298E -45 för negativa värden; 1.401298E-45 till 3.402823E38 för positiva värden
Dubbel 8 byte -1.79769313486231E308 till-4.94065645841247E-324 för negativa värden; 4.94065645841247E-324 till 1.79769313486232E308 för positiva värden
Valuta 8 byte -922 337 203 685 477,5808 till 922 337 203 685 477,5807
Decimal 14 byte +/- 79,228,162,514,264,337,593,543,950,335 utan decimalpunkt; +/- 7,9228162514264337593543950335 med 28 platser till höger om decimalen
Datum 8 byte 1 januari 100 till 31 december 9999
Objekt 4 bytes Alla objektreferenser
Sträng (variabel längd) 10 byte + stränglängd 0 till cirka 2 miljarder
Sträng (fast längd) Strängens längd 1 till cirka 65 400
Variant (med siffror) 16 byte Alla numeriska värden upp till intervallet för en dubbel
Variant (med tecken) 22 byte + stränglängd Samma intervall som för sträng med variabel längd
Användardefinierad Varierar Intervallet för varje element är detsamma som intervallet för dess datatyp.

När du anger en datatyp för en variabel i din kod berättar den för VBA hur den här variabeln ska lagras och hur mycket utrymme som ska tilldelas för den.

Om du till exempel behöver använda en variabel som är avsedd att hålla månadsnumret kan du använda BYTE -datatypen (som rymmer värden från 0 till 255). Eftersom månadsnumret inte kommer att vara över 12, fungerar det bra och reserverar också mindre minne för denna variabel.

Tvärtom, om du behöver en variabel för att lagra radnumren i Excel, måste du använda en datatyp som rymmer ett nummer upp till 1048756. Så det är bäst att använda lång datatyp.

Deklarera variabla datatyper

Som en god kodning bör du deklarera datatypen för variabler (eller konstanter) när du skriver koden. Om du gör detta ser du till att VBA endast tilldelar det angivna minnet till variabeln och detta kan göra att din kod körs snabbare.

Nedan är ett exempel där jag har deklarerat olika datatyper till olika variabler:

DeldeklarationVariables () Dim X As Integer Dim Email As String Dim FirstName As String Dim RowCount As Long Dim TodayDate As Date End Sub

För att deklarera en variabel datatyp måste du använda DIM -satsen (som är en förkortning för Dimension).

I 'Dim X som heltal', Jag har deklarerat variabeln X som heltalstyp.

Nu när jag använder den i min kod skulle VBA veta att X bara kan innehålla heltalstyp.

Om jag försöker tilldela ett värde till det som inte är ett heltal får jag ett fel (som visas nedan):

Obs! Du kan också välja att inte deklarera datatypen, i så fall tar VBA automatiskt hänsyn till variabeln för variantdatatypen. En variantdatatyp kan rymma vilken datatyp som helst. Även om det kan verka bekvämt, är det inte en bra metod att använda variantdatatyp. Det tenderar att ta mer minne och kan få din VBA -kod att köra långsammare.

Att göra variabeldeklaration obligatorisk (alternativet är tydligt)

Även om du kan koda utan att någonsin deklarera variabler, är det en bra metod att göra detta.

Förutom att spara minne och göra din kod mer effektiv har deklaration av variabler en annan stor fördel - det hjälper till att fånga fel som orsakas av felstavade variabelnamn.

För att vara säker på att du är tvungen att deklarera variabler, lägg till följande rad högst upp i din modul.

Alternativ Explicit

När du lägger till ‘Option Explicit’ måste du deklarera alla variabler innan du kör koden. Om det finns någon variabel som inte har deklarerats visar VBA ett fel.

Det finns en enorm fördel med att använda Option Explicit.

Ibland kan du sluta skriva ett fel och ange ett variabelnamn som är felaktigt.

Normalt finns det inget sätt för VBA att veta om det är ett misstag eller avsiktligt. Men när du använder "Option Explicit" skulle VBA se det felstavade variabelnamnet som en ny variabel som inte har deklarerats och visar dig ett fel. Detta hjälper dig att identifiera dessa felstavade variabelnamn, vilket kan vara ganska svårt att upptäcka i en lång kod.

Nedan är ett exempel där användningen av "Option Explicit" identifierar felet (som inte kunde ha fastnat om jag inte hade använt "Option Explicit")

Sub CommissionCalc () Dim CommissionRate As Double If Range ("A1"). Value> 10000 Then CommissionRate = 0.1 Else CommissionRtae = 0.05 End If MsgBox "Total Commission:" & Range ("A1"). Value * CommissionRate End Sub Sub

Observera att jag har felstavat ordet ”CommissionRate” en gång i denna kod.

Om jag inte använder Option Explicit körs den här koden och ger mig fel totalt kommissionsvärde (om värdet i cell A1 är mindre än 10000).

Men om jag använder Option Explicit högst upp i modulen, kommer det inte att låta mig köra den här koden innan jag antingen korrigerar det felstavade ordet eller deklarerar det som en annan variabel. Det visar ett fel som visas nedan:

Även om du kan infoga raden "Alternativet Explicit" varje gång du kodar, här är stegen för att få det att visas som standard:

  1. Klicka på Verktyg i verktygsfältet i VB Editor.
  2. Klicka på Alternativ.
  3. Klicka på fliken Editor i dialogrutan Alternativ.
  4. Markera alternativet - “Kräv variabeldeklaration”.
  5. Klicka på OK.

När du har aktiverat det här alternativet, när du öppnar en ny modul, skulle VBA automatiskt lägga till raden "Alternativ Explicit" till den.

Obs! Det här alternativet påverkar bara alla moduler du skapar efter att det här alternativet har aktiverats. Alla befintliga moduler påverkas inte.

Variablernas omfattning

Hittills har vi sett hur man deklarerar en variabel och tilldelar datatyper till den.

I det här avsnittet kommer jag att täcka omfattningen av variabler och hur du kan deklarera att en variabel endast ska användas i en delprogram, i en hel modul eller i alla moduler.

Omfattningen av en variabel avgör var variabeln kan användas i VBA,

Det finns tre sätt att omfatta en variabel i Excel VBA:

  1. Inom en enda underprogram (lokala variabler)
  2. Inom en modul (variabler på modulnivå)
  3. I alla moduler (offentliga variabler)

Låt oss titta på var och en av dessa i detalj.

Inom en enda underprogram (lokala variabler)

När du deklarerar en variabel inom en subrutin/procedur, är variabeln endast tillgänglig för den subrutinen.

Du kan inte använda den i andra delrutiner i modulen.

Så snart subrutinen slutar tas variabeln bort och minnet som används av den frigörs.

I exemplet nedan deklareras variablerna inom delrutinen och skulle raderas när denna underprogram slutar.

Inom en modul (variabler på modulnivå)

När du vill att en variabel ska vara tillgänglig för alla procedurer i en modul måste du deklarera den högst upp i modulen (och inte i någon underprogram).

När du har deklarerat det högst upp i modulen kan du använda den variabeln i alla procedurer i den modulen.

I exemplet ovan deklareras variabeln 'i' högst upp på modulen och kan användas av alla moduler.

Observera att när subrutinen slutar raderas inte modulnivåvariablerna (den behåller sitt värde).

Nedan är ett exempel, där jag har två koder. När jag kör det första förfarandet och sedan kör det andra blir värdet på 'i' 30 (eftersom det bär värdet 10 från det första förfarandet)

I alla moduler (offentliga variabler)

Om du vill att en variabel ska vara tillgänglig i hela proceduren i arbetsboken måste du deklarera den med det offentliga sökordet (istället för DIM).

Nedanstående kodrad högst upp i modulen skulle göra variabeln "CommissionRate" tillgänglig i alla moduler i arbetsboken.

 Public CommissionRate As Double

Du kan infoga variabeldeklarationen (med hjälp av det offentliga sökordet) i någon av modulerna (högst upp före någon procedur).

Statiska variabler (som behåller värdet)

När du arbetar med lokala variabler, så fort proceduren avslutas, skulle variabeln förlora sitt värde och raderas från VBA: s minne.

Om du vill att variabeln ska behålla värdet måste du använda Statisk nyckelord.

Låt mig först visa dig vad som händer i ett normalt fall.

I koden nedan, när jag kör proceduren flera gånger, kommer det att visa värdet 10 varje gång.

Delprocedur1 () Dim i Som heltal i = i + 10 MsgBox i End Sub

Om jag nu använder det statiska sökordet istället för DIM och kör proceduren flera gånger, kommer det att fortsätta visa värden i steg om 10. Detta händer när variabeln 'i' behåller sitt värde och använder det i beräkningen.

Delprocedur1 () Statisk i Som heltal i = i + 10 MsgBox i End Sub

Deklarera konstanter i Excel VBA

Även om variabler kan ändras under kodkörningen, kan du använda konstanter om du vill ha fasta värden.

En konstant låter dig tilldela ett värde till en namngiven sträng som du kan använda i din kod.

Fördelen med att använda en konstant är att det gör det enkelt att skriva och förstå kod, och låter dig också styra alla fasta värden från ett ställe.

Om du till exempel beräknar provisioner och provisionen är 10%kan du skapa en konstant (CommissionRate) och tilldela värdet 0,1 till den.

I framtiden, om provisionen ändras, behöver du bara göra ändringen på ett ställe istället för att manuellt ändra den i koden överallt.

Nedan är ett kodexempel där jag har tilldelat konstanten ett värde:

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

Följande rad används för att deklarera konstanten:

Const CommissionRate As Double = 0.1

När du deklarerar konstanter måste du börja med sökordet 'Konst', Följt av namnet på konstanten.

Observera att jag har angett datatypen för konstanten som dubbel i det här exemplet. Återigen är det en bra metod att ange datatypen så att din kod körs snabbare och blir mer effektiv.

Om du inte deklarerar datatypen skulle det betraktas som en variantdatatyp.

Precis som variabler kan konstanter också ha omfattning baserat på var och hur dessa deklareras:

  1. Inom en enda subrutin (lokala konstanter): Dessa är tillgängliga i delrutinen/proceduren där dessa deklareras. När proceduren avslutas raderas dessa konstanter från systemets minne.
  2. Inom en modul (modulkonstanter): Dessa deklareras högst upp i modulen (innan någon procedur). Dessa är tillgängliga för alla procedurer i modulen.
  3. I alla moduler (offentliga konstanter): Dessa deklareras med nyckelordet "Public", högst upp i en modul (före någon procedur). Dessa är tillgängliga för alla procedurer i alla moduler.

Du kanske också gillar följande VBA -handledning:

  • Hur man spelar in ett makro i Excel
  • Arbeta med celler och intervall i Excel VBA
  • Arbeta med kalkylblad med Excel VBA
  • Arbeta med arbetsböcker i Excel VBA
  • VBA -evenemang
  • Excel VBA -slingor
  • Hur man kör ett makro i Excel
  • If Then Else Statement i Excel VBA.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave