Sådan bruges variabler i Excel-subprocedurer i Visual Basic for Applications

Oversættelser af artikler Oversættelser af artikler
Artikel-id: 843144 - Få vist de produkter, som denne artikel refererer til.
Udvid alle | Skjul alle

På denne side

INTRODUKTION

I denne artikel beskrives brugen af variabler i Microsoft Excel-subprocedurer i Microsoft Visual Basic for Applications.

Yderligere Information

Variabler i en subprocedure

En effektiv funktion ved programmeringssprog er evnen til at gemme noget i en variabel, så indholdet af variablen kan bruges eller redigeres senere i proceduren. I dette dokument beskrives følgende brug af variabler i Visual Basic:
  • Sådan angives variabler.
  • Procedurerne og projekterne, der kan bruge variablen.
  • Levetid for en variabel.

Sådan angives en variabel i en makro

Den nemmeste metode at angive en variabel i en makro er at bruge sætningen Dim. Følgende linje angiver to variabler, x og y, som heltal:
Dim x As Integer, y As Integer
Med x og y angivet som heltal giver du Visual Basic besked om at reservere tilstrækkelig hukommelse til en heltalsvariabel (2 byte for både x og y), og at oplysningerne, der er gemt i enten x eller y, er et helt tal mellem -32768 og 32767.

Bemærk! Hvis du angiver mere end én variabel via en enkelt Dim-sætning, skal du angive datatypen for hver variabel.

Hvis du ikke angiver datatypen for hver variabel, som vist i den følgende Visual Basic-kode, angives kun variablen y som en heltalsvariabel. Variablen x vil være en varianttype:
Dim x, y As Integer
Yderligere oplysninger finder du i afsnittet "Variant af datatype".

Følg denne fremgangsmåde for at udføre en variabeltest:
  1. Gem og luk eventuelle åbne projektmapper, og åbn derefter en ny projektmappe.
  2. Start Visual Basic Editor (tryk på ALT+F11).
  3. Klik på Modul i menuen Indsæt.
  4. Skriv følgende kode:
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End Sub
  5. Kør makroen Variable_Test. Der vises følgende meddelelse:
    the value of x is 10
    the value of y is 100
  6. Klik på OK.
  7. I makroen Variable_Test skal du ændre følgende linje:
    x = 10
    

    til:
    x = "error"
    
  8. Kør makroen Variable_Test.
Du modtager en kørselsfejl, da "error" ikke er et heltal, og du forsøger at tildele denne strengværdi til heltalsvariablen x.

Oversigt over datatype

I følgende tabel vises gængse variable datatyper:

Skjul tabellenUdvid tabellen
DatatypeLagerstørrelseTilgængeligt område
Boolesk 2 byte Sandt eller falsk
Heltal 2 byte -32.768 til 32.767
Lang 4 byte -2.147.483.648 til 2.147.483.647
Dobbelt 8 byte -1.79769313486232E308 til -4.94065645841247E-324 for negative værdier, 4.94065645841247E-324 til 1.79769313486232E308 for positive værdier
Valuta 8 byte -922.337.203.685.477,5808 til 922.337.203.685.477,5807
Dato 8 byte 1. januar, 100 til 31. december, 9999
Streng 10 byte + strenglængde

Variant af datatype

Hvis du ikke angiver en datatype, når du angiver en variabel, eller hvis du ikke angiver en variabel, angiver Visual Basic automatisk variantdatatypen for denne variabel. Følgende er fordelene ved variabler, der angives som denne datatype:
  • Variablerne kan indeholde streng, dato, tidspunkt, boolesk eller numerisk værdi.
  • Variablerne kan automatisk konvertere værdierne, som de indeholder.
Ulempen er, at variantvariabler kræver mindst 16 byte hukommelse. 16 byte hukommelse kan være meget i store procedurer eller i komplekse moduler.

Følg denne fremgangsmåde for at se, hvordan dette virker i makroen Variable_Test:
  1. Skift koden i makroen 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
    
  2. Kør makroen Variable_Test.
Der vises ikke en fejlmeddelelse, da du kan tildele alt til variantvariablerne x og y.

Bemærk! Makroen virker stadig, selv om du udelader følgende linje, da variablerne x og y behandles som variantdatatyper:
Dim x, y

Omfang på en variabel

Når du angiver en variabel, kan den muligvis ikke findes af andre makroer i samme modul, i andre moduler eller i andre projekter. Tilgængeligheden af en variabel i moduler kaldes et omfang. De tre typer omfang er procedureniveau, niveau for privat modul og niveau for offentligt modul. Omfanget afhænger af, hvordan og hvor du angiver variablen eller variablerne.

Omfang på procedureniveau

En variabel med omfang på procedureniveau kan ikke findes uden for proceduren, hvor den angives. Hvis du angiver værdien for en variabel, der har omfang på procedureniveau, kan denne variabels indhold ikke findes af andre makroer.

Følg denne fremgangsmåde for at kontrollere, at en variabel med omfang på procedureniveau ikke kan ses uden for proceduren, hvor den angives:
  1. Indsæt et nyt modul i projektet.
  2. Skriv begge følgende makroer i dette modul:
    Sub Macro1()
    Dim x As Integer
    x = 10
    MsgBox "x, as seen by Macro1 is " & x
    'the next line runs Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Kør Macro1.

    Der vises følgende meddelelse:
    x, as seen by Macro1 is 10
  4. Klik på OK.

    Der vises følgende meddelelse:
    x, as seen by Macro2 is
  5. Klik på OK.
Macro2 viser ikke en variabel for x, da variablen x er lokal til Macro1.

Omfang på niveau for privat og offentligt modul

Du kan definere variablerne i angivelsesafsnittet på et modul (øverst i modulet, over alle subprocedurer) og angive omfanget på variablen ved at bruge sætningen Public, Dim eller Private. Hvis du placerer sætningen Public foran variablen, vil variablen være tilgængelig for alle makroer i alle projektets moduler. Hvis du placerer enten sætningen Dim eller Private foran variablen, vil variablen kun være tilgængelig for makroer i modulet, hvor den bliver angivet.

Du kan se forskellen mellem sætningerne Public og Dim ved at følge denne fremgangsmåde:
  1. Gem og luk eventuelle åbne projektmapper, og åbn derefter en ny projektmappe.
  2. Start Visual Basic Editor.
  3. Indsæt et modul i projektet.
  4. Skriv følgende kode i dette modul:
    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
    
  5. Indsæt et andet modul i projektet.
  6. Skriv følgende kode i dette modul:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Kør makroen Macro_1a i det første modul.

    Hvis variablen x er angivet som "Public x As Integer", har alle tre makroer i projektet adgang til værdien af x. Den første meddelelsesboks viser værdien 10. Den anden meddelelsesboks viser værdien 20 (da x ganges med 2 i Macro_1b). Den tredje meddelelsesboks viser værdien 60 (da værdien af x blev ændret til 20 i Macro_1b og derefter blev ganget med 3 i Macro2).
  8. Skift angivelseslinjen i det første modul fra:
    Public x As Integer

    til:
    Dim x As Integer
  9. Kør makroen Macro_1a.

    Hvis variablen x er angivet som "Dim x As Integer", har kun makroerne i det første modul adgang til værdien af x. Så den første meddelelsesboks viser værdien 10, den anden meddelelsesboks viser værdien 20 (da x ganges med 2 i Macro_1b), og den tredje meddelelsesboks viser værdien 0 (da Macro2 ikke kan finde værdien af x og den ikke-initialiserede værdi på nul bruges af Macro 2).
  10. Skift angivelseslinjen i det første modul fra:
    Dim x As Integer

    til:
    Private x As Integer
  11. Kør makroen Macro_1a.
De samme meddelelsesbokse vises via sætningsomfanget Private, da de brugte sætningen Dim. Variablen x har samme omfang som modulet, hvor den blev angivet.

Bemærk! Hvis omfanget på variablen skal begrænses til modulet, hvor det angives, skal du bruge sætningen Private i stedet for sætningen Dim. De opnår begge samme effekt, men omfanget er klarere, når du læser koden, hvis du bruger sætningen Private.

Levetid for en variabel

Perioden, hvor en variabel bibeholder sin værdi, kaldes dens levetid. Værdien af en variabel kan ændres i løbet af dens levetid, men den bibeholder en værdi. Desuden har en variabel ikke længere en værdi, når den mister omfang.

Sådan initialiseres værdien af en variabel

Når du kører en makro, bliver alle variabler initialiseret til en værdi. En numerisk variabel initialiseres til nul, en streng med variabel længde initialiseres til en streng uden længde (""), og en streng med fast længde udfyldes med ASCII-koden 0. Variantvariabler initialiseres til at være tomme. En tom variabel repræsenteres af et nul i en numerisk kontekst og af en streng uden længde ("") i en strengkontekst.

Variabler på procedureniveau

Hvis du har en variabel, der er angivet i en makro via sætningen Dim, bibeholder variablen sin værdi, så længe makroen kører. Hvis denne makro kontakter andre makroer, bibeholdes værdien af variablen (dog ikke tilgængelig for andre makroer), så længe disse andre makroer også kører.

Følg denne fremgangsmåde for at få demonstreret, hvordan variabler på procedureniveau virker:
  1. Indsæt et nyt modul i projektet.
  2. Skriv begge følgende makroer i dette modul:
    Sub Macro1()
    'set x as a procedure level variable
    Dim x As Integer
       MsgBox "the initialized value of x is " & x
    x = 10
    MsgBox "x is " & x
    'the next line runs Macro2
    Macro2
    MsgBox "x is still " & x
    End Sub
    Sub Macro2()
    MsgBox "x, as seen by Macro2 is " & x
    End Sub
    
  3. Kør Macro1.

    Der vises følgende meddelelse:
    the initialized value of x is 0
  4. Klik på OK.

    Der vises følgende meddelelse:
    x is 10
  5. Klik på OK.

    Der vises følgende meddelelse:
    x, as seen by Macro2 is
  6. Klik på OK.

    Macro2 viser ikke en variabel for x, da variablen x er lokal til Macro1. Der vises følgende meddelelse:
    x is still 10
  7. Klik på OK.
  8. Kør Macro1.
Der vises de samme meddelelser, som beskrives i trin 3-6. Værdien af variablen x gik tabt, da Macro1 stoppede i trin 6. Derfor viser den første meddelelse værdien af x som nul (den initialiserede værdi), når du kører Macro1 i trin 7 igen.

Statisk nøgleord

Hvis en variabel på procedureniveau angives via det statiske nøgleord, bibeholder variablen sin værdi, indtil projektet nulstilles. Hvis du har en statisk variabel, bliver den derfor initialiseret til dens sidste værdi, næste gang du kontakter proceduren.

Du kan se, hvordan det statiske nøgleord virker, ved at følge denne fremgangsmåde:
  1. Skift koden i Macro1 til:
    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
    
  2. Kør Macro1.

    Der vises følgende meddelelse:
    the initialized value of x is 0
  3. Klik på OK.

    Der vises følgende meddelelse:
    x is 10
  4. Klik på OK.
  5. Kør Macro1.

    Der vises følgende meddelelse:
    the initialized value of x is 10
  6. Klik på OK.

    Der vises følgende meddelelse:
    x is 20
  7. Klik på OK.
Værdierne, der vises i meddelelserne, er forskellige anden gang, da variablen x er angivet som en statisk variabel. Variablen bibeholder sin værdi, når du kører Macro1 første gang.

Bemærk! Hvis du har en variabel på modulniveau, har den samme levetid, som hvis det var en statisk variabel på procedureniveau.

Følg denne fremgangsmåde for at kontrollere levetiden for en variabel på modulniveau:
  1. Rediger koden i modulet, der indeholder Macro1, til følgende:
    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
    
  2. Kør Macro1.

    Der vises følgende meddelelse:
    the initialized value of x is 0
  3. Klik på OK.

    Der vises følgende meddelelse:
    x is 10
  4. Klik på OK.
  5. Kør Macro1.

    Der vises følgende meddelelse:
    the initialized value of x is 10
  6. Klik på OK.

    Der vises følgende meddelelse:
    x is 20
  7. Klik på OK.
Værdierne, der vises i meddelelserne, er forskellige anden gang, da variablen x er angivet som en statisk variabel, og den bibeholder sin værdi, når du kører Macro1 første gang.

Nulstil et projekt for at nulstille variabler

Hvis du vil nulstille en værdi for en statisk variabel eller for en variabel på modulniveau, skal du klikke på knappen Nulstil på værktøjslinjen Standard eller klikke på Nulstil i menuen Kør.

Hvis du gør dette for projektet Macro1 og derefter kører Macro1 igen, initialiseres værdien af variablen x tilbage til nul, og den første meddelelse vises:
the initialized value of x is 0
Du kan finde flere oplysninger ved at klikke på nedenstående artikelnummer for at få vist artiklen i Microsoft Knowledge Base:
843145 Beskrivelse af Excel-subprocedurer i Visual Basic for Applications (Arrays). Artiklen er evt. på engelsk.
Tilbage til toppen

Egenskaber

Artikel-id: 843144 - Seneste redigering: 3. juni 2008 - Redigering: 3.0
Oplysningerne i denne artikel gælder:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard
  • Microsoft Excel 2000 Standard
  • Microsoft Excel 97 Standard
Nøgleord: 
kbvba kbprogramming kbinfo KB843144

Send feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com