Du er offline. Venter på, at der oprettes forbindelse til internettet igen

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

Support til Office 2003 er ophørt

Microsoft ophørte med at yde support til Office 2003 den 8. april 2014. Denne ændring har haft indflydelse på dine softwareopdateringer og sikkerhedsindstillinger. Se, hvad det betyder for dig, og hvordan du kan forblive beskyttet.

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

Tilbage til toppen
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.
Tilbage til toppen

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 Integerx = 10y = 100MsgBox "the value of x is " & x & _Chr(13) & "the value of y is " & yEnd 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.

Tilbage til toppen

Oversigt over datatype

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

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

Tilbage til toppen

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, yx = "string"y = 1,23MsgBox "the value of x is " & x & _Chr(13) & "the value of y is " & yEnd 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

Tilbage til toppen

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.

Tilbage til toppen

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 Integerx = 10MsgBox "x, as seen by Macro1 is " & x'the next line runs Macro2Macro2End SubSub Macro2()MsgBox "x, as seen by Macro2 is " & xEnd 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.

Tilbage til toppen

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 IntegerSub Macro_1a()x = 10MsgBox xMacro_1bEnd SubSub Macro_1b()x = x * 2MsgBox xMacro2End Sub
  5. Indsæt et andet modul i projektet.
  6. Skriv følgende kode i dette modul:
    Sub Macro2()x = x * 3MsgBox xEnd 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.

Tilbage til toppen

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.

Tilbage til toppen

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.

Tilbage til toppen

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 variableDim x As Integer   MsgBox "the initialized value of x is " & xx = 10MsgBox "x is " & x'the next line runs Macro2Macro2MsgBox "x is still " & xEnd SubSub Macro2()MsgBox "x, as seen by Macro2 is " & xEnd 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.

Tilbage til toppen

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 variableStatic x As Integer   MsgBox "the initialized value of x is " & xx = x + 10MsgBox "x is " & xEnd 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 variableSub Macro1()   MsgBox "the initialized value of x is " & xx = x + 10MsgBox "x is " & xEnd 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.

Tilbage til toppen

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.
sub procedures VBA variables var xl2007 xl2003 xl2000 xl2002 xl
Egenskaber

Artikel-id: 843144 – Seneste udgave 06/03/2008 14:36:50 – Udgave 3.0

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard, Microsoft Excel 2000 Standard, Microsoft Excel 97 Standard

  • kbvba kbprogramming kbinfo KB843144
Feedback
ody>