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

Artikkeloversettelser Artikkeloversettelser
Artikkel-ID: 843144 - Vis produkter som denne artikkelen gjelder for.
Vis alt | Skjul alt

På denne siden

INNLEDNING

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

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.

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 Integer
    x = 10
    y = 100
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End 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.

Datatypesammendrag

Følgende tabell viser vanlige variabeldatatyper:

Skjul denne tabellenVis denne tabellen
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

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, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
    End 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

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.

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

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 Integer
    Sub Macro_1a()
    x = 10
    MsgBox x
    Macro_1b
    End Sub
    Sub Macro_1b()
    x = x * 2
    MsgBox x
    Macro2
    End Sub
    
  5. Sett inn en ny modul i prosjektet.
  6. Skriv inn følgende kode i denne modulen:
    Sub Macro1()
    x = x * 3
    MsgBox x
    End 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.

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.

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.

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 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 Macro1()
    MsgBox "x, as seen by Macro2 is " & x
    End 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).

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 variable
    Static x As Integer
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End 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 variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
    End 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.

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)
Tilbake til toppen

Egenskaper

Artikkel-ID: 843144 - Forrige gjennomgang: 26. desember 2006 - Gjennomgang: 3.0
Informasjonen i denne artikkelen gjelder:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Nøkkelord: 
kbinfo kbprogramming kbvba KB843144

Gi tilbakemelding

 

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