Du er frakoblet, venter på at Internett skal koble til igjen

Nettleseren støttes ikke

Du må oppdatere nettleseren for å bruke nettstedet.

Oppdater til den nyeste versjonen av Internet Explorer

Slik bruker du variabler i Excel-delprosedyrer i Visual Basic for Applications

Kundestøtte for Office 2003 er avsluttet

Microsoft avsluttet kundestøtte for Office 2003 den 8. april 2014. Denne endringen har påvirket programvareoppdateringene og sikkerhetsalternativene dine. Finn ut hvordan dette påvirker deg og hvordan du forblir beskyttet.

INNLEDNING
Denne artikkelen beskriver hvordan du bruker variabler i Microsoft Excel-delprosedyrer i Microsoft Visual Basic for Applications.

Tilbake til toppen
Mer informasjon

Variabler i en delprosedyre

En kraftig funksjon i programmeringsspråk er muligheten til å lagre noe i en variabel slik at innholdet i variabelen kan brukes eller endres senere i prosedyren. Dette dokumentet beskriver følgende bruk av variabler i Visual Basic:
  • Hvordan variabler deklareres.
  • Prosedyrene og prosjektene som kan bruke variabelen.
  • Levetiden til en variabel.
Tilbake til toppen

Deklarere en variabel i en makro

Den enkleste måten å deklarere en variabel i en makro på, er å bruke Dim-setningen. Følgende linje deklarerer to variabler, x og y, som Heltall:
Dim x As Integer, y As Integer
Når x og y er angitt som heltall, ber du Visual Basic sette til side tilstrekkelig minne for en heltallsvariabel (2 byte hver for x og y), og at informasjonen som er lagret enten i x eller y, er et heltall mellom -32768 og 32767.

Obs!  Hvis du deklarerer mer enn én variabel ved hjelp av en enkelt Dim-setning, må du angi datatypen for hver variabel.

Hvis du ikke angir datatypen for hver variabel, som i følgende Visual Basic-kode, blir bare variabelen y angitt som en heltallsvariabel. Variabelen x vil være en varianttype:
Dim x, y As Integer
Hvis du vil ha mer informasjon, kan du se delen Variantdatatype.

Bruk følgende fremgangsmåte for å utføre en variabeltest:
  1. Lagre og lukke alle åpne arbeidsbøker, og åpne deretter en ny arbeidsbok.
  2. Start Visual Basic Editor (trykk ALT+F11).
  3. Klikk ModulSett inn-menyen.
  4. Skriv inn 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. Kjør makroen Variable_Test. Du får en melding som ligner på følgende melding:
    the value of x is 10
    the value of y is 100
  6. Klikk OK.
  7. Endre følgende linje i makroen Variable_Test:
    x = 10

    til:
    x = "error"
  8. Kjør makroen Variable_Test.
Du før en kjøretidsfeil fordi "error" ikke er et heltall, og du forsøker å tilordne denne strengverdien til heltallsvariabelen x.

Tilbake til toppen

Datatypesammendrag

Følgende tabell viser vanlige variabeldatatyper:

DatatypeLagringsstørrelseTillatt grense
Boolsk 2 byte Sann eller usann
Heltall 2 byte -32,768 til 32,767
Lang 4 byte -2,147,483,648 til 2,147,483,647
Dobbel 8 byte -1.79769313486232E308 til -4.94065645841247E-324 for negative verdier og 4.94065645841247E-324 til 1.79769313486232E308 for positive verdier
Valuta 8 byte -922,337,203,685,477.5808 til 922,337,203,685,477.5807
Dato 8 byte 1. januar, 100 til 31. desember 9999
Streng 10 byte + strenglengde

Tilbake til toppen

Variantdatatype

Hvis du ikke angir en datatype når du deklarerer en variabel, eller du ikke deklarerer en variabel i det hele tatt, angir Visual Basic automatisk variantdatatypen for denne variabelen. Følgende er fordelene ved variabler som er deklarert som denne datatypen:
  • Variablene kan inneholde strengverdier, datoverdier, klokkeslettverdier og boolske eller numeriske verdier.
  • Variablene kan automatisk konvertere verdiene de inneholder.
Ulempen er at variantvariablene krever minst 16 byte med minne. 16 byte med minne kan være betydelig i store prosedyrer eller i komplekse moduler.

Bruk følgende fremgangsmåte for å se hvordan dette fungerer i makroen Variable_Test:
  1. Endre 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. Kjør makroen Variable_Test.
Du får ikke en feilmelding, fordi du kan tilordne hva som helst til variantvariablene x og y.

Obs!  Du kan også utelate følgende linje, og makroen vil fremdeles fungere, fordi variablene x og y behandles som variantdatatyper:
Dim x, y

Tilbake til toppen

Omfanget til en variabel

Når du deklarerer en variabel, kan det hende eller ikke hende at den ses av andre makroer i samme modul, i andre moduler eller i andre prosjekter. Denne tilgjengeligheten av en variabel i moduler kalles omfang. De tre omfangstypene er prosedyrenivå, privatmodulnivå og fellesmodulnivå. Omfanget avhenger av hvordan og hvor du deklarerer variabelen eller variablene.

Tilbake til toppen

Omfang på prosedyrenivå

En variabel med omfang på prosedyrenivå ses ikke utenfor prosedyren der den er deklarert. Hvis du angir verdien til en variabel som har omfang på prosedyrenivå, ses ikke innholdet i variabelen av andre makroer.

Bruk følgende fremgangsmåte for å bekrefte at en variabel med omfang på prosedyrenivå ikke ses utenfor prosedyren der den er deklarert:
  1. Sett inn en ny modul i prosjektet.
  2. Skriv inn begge følgende makroer i denne modulen:
    Sub Macro1()Dim x As Integerx = 10MsgBox "x, as seen by Macro1 is " & x'the next line runs Macro2Macro2End SubSub Macro1()MsgBox "x, as seen by Macro2 is " & xEnd Sub
  3. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    x, as seen by Macro1 is 10
  4. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x, as seen by Macro2 is
  5. Klikk OK.
Makro2 viser ikke en verdi for variabel x, fordi variabelen x er lokal for Makro1.

Tilbake til toppen

Omfang på privat- og fellesmodulnivå

Du kan definere variabler i deklarasjonsdelen i en modul (øverst i en modul, over alle delprosedyrer), og angi omfanget til variabelen ved hjelp av Public-setningen, Dim-setningen eller Private-setningen. Hvis du plasserer Public-setningen foran variabelen, vil variabelen være tilgjengelig for alle makroene i alle modulene i prosjektet. Hvis du plasserer enten Dim-setningen eller Private-setningen foran variabelen, er variabelen bare tilgjengelig for makroer i modulen der den deklareres.

Bruk følgende fremgangsmåte for å se forskjellen mellom Public-setningen og Dim-setningen:
  1. Lagre og lukk alle åpne arbeidsbøker, og åpne deretter en ny arbeidsbok.
  2. Start Visual Basic Editor.
  3. Sett inn en modul i prosjektet.
  4. Skriv inn følgende kode i denne modulen:
    Public x As IntegerSub Macro_1a()x = 10MsgBox xMacro_1bEnd SubSub Macro_1b()x = x * 2MsgBox xMacro2End Sub
  5. Sett inn en ny modul i prosjektet.
  6. Skriv inn følgende kode i denne modulen:
    Sub Macro1()x = x * 3MsgBox xEnd Sub
  7. Kjør makroen Makro_1a i den første modulen.

    Når variabelen x er deklarert som "Public x As Integer", har alle tre makroer i prosjektet tilgang til verdien x. Den første meldingsboksen viser en verdi på 10. Den andre meldingsboksen viser en verdi på 20 (fordi x multipliseres med 2 i Makro_1b). Den tredje meldingsboksen viser en verdi på 60 (fordi verdien x ble endret til 20 i Makro_1b, og deretter multiplisert med 3 i Makro2).
  8. Endre deklarasjonslinjen i den første modulen fra:
    Public x As Integer

    til:
    Dim x As Integer
  9. Kjør makroen Makro_1a.

    Når variabelen x er deklarert som "Dim x As Integer", har bare makroene i den første modulen tilgang til verdien x. Den første meldingsboksen viser derfor en verdi på 10, den andre meldingsboksen viser en verdi på 20, (fordi x er multiplisert med 2 i Makro_1b), og den tredje meldingsboksen viser en verdi på 0 (fordiMakro2 ikke ser verdien for x, og den ikke-initialiserte verdien på null brukes av Makro 2).
  10. Endre deklarasjonslinjen i den første modulen fra:
    Dim x As Integer

    til:
    Private x As Integer
  11. Kjør makroen Makro_1a.
De samme meldingsboksene vises ved å bruke Private-setningsomfanget som de brukte Dim-setningen. Variabelen x har samme omfang, privat til modulen der den er deklarert.

Obs!  Hvis du vil at omfanget av variabelen skal begrense seg til modulen der den er deklarert, kan du bruke Private-setningen i stedet for Dim-setningen. De oppnår begge samme virkning, men omfanget er tydeligere når du leser koden hvis du bruker Private-setningen.

Tilbake til toppen

Levetiden til en variabel

Tiden en variabel beholder sin verdi, kalles levetiden. Verdien til en variabel kan endre seg i løpet av levetiden, men vil beholde en verdi. Når variabelen mister omfanget, har den heller ikke lenger en verdi.

Tilbake til toppen

Initialisere verdien til en variabel

Når du kjører en makro, initialiseres alle variablene til en verdi. En numerisk variabel initialiseres til null, en variabel strenglengde initialiseres til en tom streng (""), og en streng med en fast lengde fylles med ASCII-koden 0. Variantvariabler initialiseres til Empty. En Empty-variabel angis av en null i en numerisk kontekst, og en tom streng ("") i en strengkontekst.

Tilbake til toppen

Variabler på prosedyrenivå

Hvis du har en variabel som er deklarert i en makro ved hjelp av Dim-setningen, beholder variabelen verdien så lenge makroen kjører. Hvis denne makroen kaller andre makroer, beholdes verdien til variabelen (men er ikke tilgjengelig for andre makroer) så lenge disse andre makroene også kjører.

Bruk følgende fremgangsmåte for å se hvordan variabler på prosedyrenivå fungerer:
  1. Sett inn en ny modul i prosjektet.
  2. Skriv inn begge følgende makroer i denne modulen:
    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 Macro1()MsgBox "x, as seen by Macro2 is " & xEnd Sub
  3. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    the initialized value of x is 0
  4. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x is 10
  5. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x, as seen by Macro2 is
  6. Klikk OK.

    Makro2 viser ikke en verdi for variabel x, fordi variabelen x er lokal for Makro1. Du får en melding som ligner på følgende melding:
    x is still 10
  7. Klikk OK.
  8. Kjør Makro1.
Du får samme melding som beskrives i trinn 3 til 6 fordi så snart Makro1 stoppet å kjøre i trinn 6, gikk verdien til variabel x tapt. Når du så kjører Makro1 på nytt i trinn 7, viser den første meldingen verdien til x som null (den initialiserte verdien).

Tilbake til toppen

Statisk nøkkelord

Hvis en variabel på prosedyrenivå deklareres ved hjelp av det statiske nøkkelordet, beholder variabelen sin verdi til prosjektet tilbakestilles. Hvis du derfor har en statisk variabel, initialiseres den til den siste verdien neste gang du kaller prosedyren.

Bruk følgende fremgangsmåte for å se hvordan det statiske nøkkelordet fungerer:
  1. Endre koden i Makro1 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. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    the initialized value of x is 0
  3. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x is 10
  4. Klikk OK.
  5. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    the initialized value of x is 10
  6. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x is 20
  7. Klikk OK.
Verdiene som vises i meldingene, er forskjellige andre gang, fordi variabel x er deklarert som en statisk variabel, og variabelen beholder sin verdi etter at du har kjørt Makro1 første gang.

Obs!  Hvis du har en variabel på modulnivå, er levetiden den samme som om den var en variabel med statisk prosedyrenivå.

Bruk følgende fremgangsmåte for å bekrefte levetiden til en variabel på modulnivå:
  1. Endre koden i modulen som inneholder Makro1 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. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    the initialized value of x is 0
  3. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x is 10
  4. Klikk OK.
  5. Kjør Makro1.

    Du får en melding som ligner på følgende melding:
    the initialized value of x is 10
  6. Klikk OK.

    Du får en melding som ligner på følgende melding:
    x is 20
  7. Klikk OK.
Verdiene som vises i meldingene, er forskjellige andre gang, fordi variabel x er deklarert som en statisk variabel, og den beholder sin verdi etter at du har kjørt Makro1 første gang.

Tilbake til toppen

Tilbakestille et prosjekt for å tilbakestille variabler

Hvis du vil tilbakestille verdien for en statisk variabel eller for en variabel på modulnivå, klikker du Tilbakestill på standardverktøylinjen, eller klikker TilbakestillKjør-menyen.

Hvis du gjør dette for Makro1-prosjektet, og deretter kjører Makro1 på nytt, initialiseres verdien for variabel x tilbake til null, og du får den første meldingen:
the initialized value of x is 0
Hvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:
843145 Beskrivelse av Excel-delprosedyrer i Visual Basic for Applications (matriser) (denne artikkelen kan være på engelsk)
sub procedures VBA variables var xl2007 xl2003 xl2000 xl2002 xl
Egenskaper

Artikkel-ID: 843144 – Forrige gjennomgang: 12/26/2006 07:55:00 – Revisjon: 3.0

  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • kbinfo kbprogramming kbvba KB843144
Tilbakemelding
did=1&t=">c1.microsoft.com/c.gif?DI=4050&did=1&t="> >>ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");