Introduktion
Denne artikel beskriver, hvordan du bruger variabler Microsoft Excel underprocedurer i Microsoft Visual Basic for Applications.
Flere oplysninger
Variabler i en underprocedure
En effektiv funktion til programmeringssprog er muligheden for at gemme noget i en variabel, så indholdet af variablen kan bruges eller ændres senere i proceduren. I dette dokument beskrives følgende brug af variabler i Visual Basic:
-
Sådan erklæres variabler.
-
Fremgangsmåderne og de projekter, der kan bruge variablen.
-
En variabels levetid.
Erklære en variabel i en makro
Den nemmeste måde at erklære en variabel i en makro på er ved at bruge dim-sætningen. Følgende linje erklærer to variabler som heltal:
Dim x As Integer, y As Integer
Med x og y angivet som heltal beder du Visual Basic om at sætte tilstrækkelig hukommelse til side for en heltalsvariabel (2 byte hver for x og y), og at de oplysninger, der er gemt i enten x eller y, er et helt tal mellem -32768 og 32767.
BEMÆRK! Hvis du erklærer mere end én variabel ved hjælp af en enkelt Dim-sætning, skal du angive datatypen for hver variabel.
Hvis du ikke angiver datatypen for hver variabel, som i følgende Visual Basic, er det kun variablen y, der konfigureres som en heltalsvariabel. Variablen x bliver af varianttypen:
Dim x, y As Integer
Du kan finde flere oplysninger under Datatypen Variant nedenfor.
Hvis du vil udføre en variabel test, skal du følge disse trin:
-
Gem og luk alle åbne projektmapper, og åbn derefter en ny projektmappe.
-
Start redigeringsprogrammet Visual Basic (tryk på Alt+F11).
-
Klik på Modul i menuen Indsæt.
-
Skriv følgende kode:
Sub Variable_Test()
Dim x As Integer, y As Integer
x = 10
y = 100
MsgBox "værdien af x er " & x & _
Chr(13) & "værdien af y er " & y
End Sub -
Afspil Variable_Test makro. Du modtager følgende meddelelse:
the value of x is 10
the value of y is 100 -
Klik på OK.
-
I dialogboksen Variable_Test skal du ændre følgende linje:
x = 10 -
til:
x = "error" -
Afspil Variable_Test makro.
Du får en kørselsfejl, fordi "fejl" ikke er et heltal, og du forsøger at tildele denne strengværdi til heltalsvariablen x.
Oversigt over datatype
Disse er de almindelige variable datatyper:
Datatypen Varians
Hvis du ikke angiver en datatype, når du erklærer en variabel, eller du slet ikke erklærer en variabel, angiver Visual Basic automatisk datatypen for varianten for denne variabel. Følgende er fordelene ved variabler, der erklæres som denne datatype:
-
Variablerne kan indeholde streng-, dato-, klokkeslæts-, booleske eller numeriske værdier.
-
Variablerne kan konvertere de værdier, som de indeholder, automatisk.
Ulempen er, at variabler kræver mindst 16 byte hukommelse. 16 byte hukommelse kan være betydelig i store procedurer eller i komplekse moduler.
Hvis du vil se, hvordan det fungerer i Variable_Test, skal du følge disse trin:
Skift koden i Variable_Test til:
Sub Variable_Test()
Dim x, y
x = "string"
y = 1.23
MsgBox "the value of x is " & x & _
Chr(13) & "the value of y is " & y
End Sub
Afspil Variable_Test makro.
Du får ikke en fejl, fordi du kan tildele noget til variantvariablerne x og y.
BEMÆRK! Du kan også lade følgende linje være ude, og makroen fungerer stadig, efterhånden som variablerne x og y behandles som datatyperne Variant:
Dim x, y
En variabels omfang
Når du erklærer en variabel, kan den muligvis ses af andre makroer i samme modul, i andre moduler eller i andre projekter. Denne tilgængelighed af en variabel i moduler kaldes for omfang. De tre typer område er procedureniveau, privat modulniveau og offentligt modulniveau. Omfanget afhænger af, hvordan og hvor du erklærer din variabel eller variabler.
Omfang på procedureniveau
En variabel med omfang på procedureniveau ses ikke uden for den procedure, hvor den erklæres. Hvis du angiver værdien for en variabel, der har omfang på procedureniveau, kan variablens indhold ikke ses af andre makroer.
Følg disse trin for at bekræfte, at en variabel med omfang på procedureniveau ikke ses uden for den procedure, hvor den er erklæret:
-
Indsæt et nyt modul i projektet.
-
Skriv begge af følgende makroer i dette modul:
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, som det ses af Macro1 er " & x 'den næste linje kører Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, som det ses af Macro2 er " & x End Sub -
Afspil Makro1, og du får vist følgende meddelelse:
x, as seen by Macro1 is 10 -
Klik på OK,og du får vist følgende meddelelse:
x, as seen by Macro2 is -
Klik på OK.
Makro2 viser ikke en værdi for variablen x, fordi variablen x er lokal i forhold til Makro1.
Omfang på privat og offentligt modulniveau
Du kan definere variabler i erklæringssektionen i et modul (øverst i et modul, over alle underprocedurer), og angive omfanget af din variabel ved hjælp af Den Offentlige erklæring, Dim-sætningen eller Private-sætningen. Hvis du placere sætningen Offentlig foran variablen, vil din variabel være tilgængelig for alle makroerne i alle modulerne i projektet. Hvis du placere enten sætningen Dim eller Privat foran variablen, er din variabel kun tilgængelig for makroer i modulet, hvor den erklæres.
Hvis du vil se forskellen mellem Den Offentlige sætning og Dim-sætningen, skal du følge disse trin:
-
Gem og luk alle åbne projektmapper, og åbn derefter en ny projektmappe.
-
Start Visual Basic Editor.
-
Indsæt et modul i projektet.
-
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub
-
Indsæt endnu et modul i projektet.
-
Skriv følgende kode i dette modul:
Sub Macro2() x = x * 3
MsgBox x
End Sub -
Afspil Macro_1a makro i det første modul.
-
Når variablen x erklæres som "Offentligt x Som heltal", har alle tre makroer i projektet adgang til værdien x. I det første meddelelsesfelt vises værdien 10. I det andet meddelelsesfelt vises en værdi på 20 (fordi x ganges med 2 i Macro_1b). Det tredje meddelelsesfelt viser en værdi på 60 (fordi værdien af x blev ændret til 20 i Macro_1b og derefter blev den ganget med 3 i Makro2).
-
Rediger erklæringens linje i det første modul fra:
Public x As Integer
til:
Dim x As Integer -
Afspil Macro_1a makro.
-
Når variablen x er erklæret som "Dim x Som heltal", er det kun makroerne i det første modul, der har adgang til værdien x. Så den første meddelelse viser en værdi på 10, viser det andet meddelelsesfelt værdien 20, (fordi x ganges med 2 i Macro_1b), og den tredje meddelelsesboks viser en værdi på 0, (fordi Makro2 ikke kan se værdien af x, og den ikke-initialiserede værdi af nul bruges af makro 2).
-
Rediger erklæringens linje i det første modul fra:
Dim x As Integer
til:
Private x As Integer -
Afspil Macro_1a makro.
-
De samme meddelelsesfelter vises ved hjælp af området Privat sætning, som de brugte Dim-sætningen. Variablen x har samme omfang og er privat for det modul, hvor det erklæres.
BEMÆRK! Hvis du ønsker, at omfanget af din variabel skal være begrænset til det modul, hvor den er erklæret, skal du bruge Privatestatement i stedet for Dim-sætningen. De kan begge opnå den samme effekt, men omfanget er tydeligere, når du læser koden, hvis du bruger sætningen Private.
Levetid for en variabel
Den tid, hvori en variabel bevarer sin værdi, kaldes også dens levetid. Værdien af en variabel kan ændres i løbet af dens levetid, men den bevarer en værdi. Når en variabel mister området, har den ikke længere en værdi.
Initialisere værdien af en variabel
Når du kører en makro, initialiseres alle variablerne til en værdi. En numerisk variabel initialiseres til nul, en variabel længdestreng initialiseres til en streng af længden nul (""), og en fast længdestreng udfyldes med ASCII-koden 0. Variantvariabler initialiseres til Tom. En Tom variabel repræsenteres af et nul i en numerisk kontekst og en streng af længden nul ("") i en strengkontekst.
Variabler på procedureniveau
Hvis du har en variabel, der erklæres i en makro ved hjælp af dim-sætningen, bevarer variablen sin værdi, så længe makroen kører. Hvis denne makro kalder andre makroer, bevares variablens værdi (ikke tilgængelig for andre makroer), så længe disse andre makroer også kører.
Følg disse trin for at demonstrere, hvordan variabler på procedureniveau fungerer:
-
Indsæt et nyt modul i projektet.
-
Skriv begge af følgende makroer i dette modul:
Sub Macro1()
'set x as a procedure level variable
Dim x As Integer
MsgBox "den initialiserede værdi af x er " & x
x = 10
MsgBox "x is " & x
'den næste linje kører Makro2
Makro2
MsgBox "x er stadig " & x
End Sub
Sub Macro2()
MsgBox "x, som det ses af Macro2 er " & x
End Sub -
Kør Makro1.
-
Du modtager følgende meddelelse:
the initialized value of x is 0 -
Klik på OK,og du får vist meddelelsen:
x is 10 -
Klik på OK,og du får vist følgende meddelelse:
x, as seen by Macro2 is -
Klik på OK.
-
Makro2 viser ikke en værdi for variablen x, fordi variablen x er lokal i forhold til Makro1. Du får følgende meddelelse:
x is still 10 -
Klik på OK.
-
Kør Makro1.
Du modtager de samme meddelelser, der er beskrevet i trin 3 til 6, fordi så snart Macro1 holdt op med at køre i trin 6, gik værdien af variablen x tabt. Når du kører Makro1 igen i trin 7, viser den første meddelelse derfor værdien af x som nul (den initialiserede værdi).
Statisk nøgleord
Hvis en variabel på procedureniveau erklæres ved hjælp af det statiske nøgleord, bevarer variablen sin værdi, indtil projektet nulstilles. Hvis du har en statisk variabel, initialiseres den statiske variabel til dens sidste værdi, næste gang du kalder proceduren.
Hvis du vil se, hvordan det statiske nøgleord fungerer, skal du følge disse trin:
-
Change the code in Macro1 to: Sub Macro1() 'set x as a procedure level variable Static x As Integer MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
-
Kør Makro1.
-
Du får meddelelsen:
the initialized value of x is 0 -
Klik på OK,og du får vist meddelelsen:
x is 10 -
Klik på OK.
-
Afspil Makro1, og du får vist følgende meddelelse:
the initialized value of x is 10 -
Klik på OK,og du får vist følgende meddelelse:
x is 20 -
Klik på OK.
De værdier, der vises i meddelelserne, er forskellige anden gang, fordi variablen x erklæres som en statisk variabel, og variablen bevarer sin værdi, når du kører Makro1 første gang.
BEMÆRK! Hvis du har en variabel på modulniveau, er dens levetid den samme, som hvis det var en statisk variabel på procedureniveau.
Følg disse trin for at bekræfte levetiden for en variabel på modulniveau:
-
Change the code in the module that contains Macro1 to the following: Dim x As Integer 'create a module-level variable Sub Macro1() MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub
-
Afspil Makro1, og du får vist følgende meddelelse:
the initialized value of x is 0 -
Klik på OK, og du får vist følgende meddelelse:
x is 10 -
Klik på OK.
-
Afspil Makro1, og du får vist denne meddelelse:
the initialized value of x is 10 -
Klik på OK.
-
Du modtager følgende meddelelse:
x is 20 -
Klik på OK.
De værdier, der vises i meddelelserne, er forskellige anden gang, fordi variablen x erklæres som en statisk variabel, og den bevarer sin værdi, når du kører Makro1 første gang.
Nulstil et projekt for at nulstille variabler
Hvis du vil nulstille værdien for en statisk variabel eller for en variabel på modulniveau, skal du klikke på knappen Nulstil på knappen
Standardværktøjslinjen, eller klik på Nulstil i menuen Kør.
Hvis du gør dette for Makro1-projektet og derefter kører Makro1igen, initialiseres værdien af variablen x tilbage til nul, og du modtager den første meddelelse:
the initialized value of x is 0