Innføring

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

Mer informasjon

Variabler i en underprosedyre

En kraftig funksjon i programmeringsspråk er muligheten til å lagre noe i en variabel, slik at innholdet i variabelen kan brukes eller kan endres senere i prosedyren. Dette dokumentet beskriver følgende bruk av variabler i Visual Basic:

  • Hvordan variabler deklareres.

  • Fremgangsmåtene 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, som heltall:

    Dim x As Integer, y As Integer

Når x og y er angitt som heltall, ber du Visual Basic sette av nok minne til en heltallsvariabel (2 byte hver for x og y), og at informasjonen som er lagret i x eller y, er et helt tall 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, settes bare variabelen y opp som en heltallsvariabel. Variabelen x vil være en varianttype:

    Dim x, y As Integer

Hvis du vil ha mer informasjon, kan du se Variant-datatype nedenfor.
 

Følg disse trinnene for å utføre en variabel test:

  1. Lagre og lukk alle åpne arbeidsbøker, og åpne deretter en ny arbeidsbok.

  2. Start redigeringsprogrammet Visual Basic (trykk ALT+F11).

  3. Klikk Modul Sett inn-menyen.

  4. Skriv inn følgende kode:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "verdien av x er " & x & _
        Chr(13) & "verdien av y er " & y
    End Sub

  5. Kjør Variable_Test makroen. Du får følgende melding:

    the value of x is 10
    the value of y is 100

  6. Klikk på OK.

  7. Endre Variable_Test linje i makroen:

    x = 10

  8. til:

    x = "error"

  9. Kjør Variable_Test makroen.

Du får en kjøretidsfeil fordi «feil» ikke er et heltall, og du prøver å tilordne denne strengverdien til heltallsvariabelen x.
 

Sammendrag av datatype

Dette er de vanlige variable datatypene:

vanlige datatyper for variabel

datatypen Variant

Hvis du ikke angir en datatype når du deklarerer en variabel, eller du ikke deklarerer en variabel i det hele tatt, Visual Basic automatisk variantdatatypen for denne variabelen. Følgende er fordelene med variabler som deklareres som denne datatypen:

  • Variablene kan inneholde streng-, dato-, klokkeslett-, boolske eller numeriske verdier.

  • Variablene kan konvertere verdiene de inneholder automatisk.

Ulempen er at variantvariabler krever minst 16 byte minne. 16 byte minne kan være betydelig i store prosedyrer eller i komplekse moduler.

Hvis du vil se hvordan dette fungerer i Variable_Test makroen, følger du disse trinnene:

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

Kjør Variable_Test makroen.

Du får ikke en feilmelding fordi du kan tilordne noe til variantvariablene x og y.

OBS! Du kan også gå ut av følgende linje, og makroen vil fortsatt fungere som variablene x og y behandles som datatyper for Variant:

    Dim x, y

Omfanget av en variabel

Når du deklarerer en variabel, kan det hende at den ikke vises 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å, privat modulnivå og offentlig modulnivå. Omfanget avhenger av hvordan og hvor du deklarerer variabelen eller variablene.

Omfang på prosedyrenivå

En variabel med omfang på prosedyrenivå vises ikke utenfor prosedyren der den deklareres. Hvis du angir verdien til en variabel som har omfang på prosedyrenivå, vil ikke denne variabelens innhold vises av andre makroer.

Følg disse trinnene for å bekrefte at en variabel med omfang på prosedyrenivå ikke vises utenfor prosedyren der den deklareres:

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

  3. Kjør Makro1, så får du følgende melding:

    x, as seen by Macro1 is 10

  4. Klikk OK, så får du følgende melding:

    x, as seen by Macro2 is

  5. Klikk på OK.

Makro2 viser ikke en verdi for variabelen x fordi variabelen x er lokal til Makro1.

Omfang på privat og offentlig modulnivå

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

Hvis du vil se forskjellen mellom den offentlige setningen og Dim-setningen, følger du disse trinnene:

  1. Lagre og lukk alle åpne arbeidsbøker, og åpne deretter en ny arbeidsbok.

  2. Start Visual Basic redigeringsprogrammet.

  3. Sett inn en modul i prosjektet.

  4. 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
  5. Sett inn en annen modul i prosjektet.

  6. Skriv inn følgende kode i denne modulen:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Kjør Macro_1a makro i den første modulen.

  8. Med variabelen x deklarert som «Offentlig x som heltall», har alle de tre makroene i prosjektet tilgang til verdien av x. Den første meldingsboksen viser verdien 10. Den andre meldingsboksen viser en verdi på 20 (fordi x multipliseres med 2 i Macro_1b). Den tredje meldingsboksen viser en verdi på 60 (fordi verdien av x ble endret til 20 i Macro_1b og deretter ble den multiplisert med 3 i Makro2).

  9. Endre deklarasjonslinjen i den første modulen

    fra:   Public x As Integer

    til:

       Dim x As Integer

  10. Kjør Macro_1a makroen.

  11. Med variabelen x deklarert som «Dim x As Integer», er det bare makroene i den første modulen som har tilgang til verdien av x. Den første meldingsboksen viser en verdi på 10, og den andre meldingsboksen viser en verdi på 20( fordi x multipliseres med 2 i Macro_1b), og den tredje meldingsboksen viser verdien 0 (fordi Makro2 ikke ser verdien av x, og den ikke-initialiserte verdien null brukes av makro 2).

  12. Endre deklarasjonslinjen i den første modulen

    fra:  Dim x As Integer

    til:

        Private x As Integer

  13. Kjør Macro_1a makroen.

  14. De samme meldingsboksene vises ved hjelp av private uttrykksomfang 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 begrenses til modulen der den er deklarert, bruker du Privatestatement i stedet for Dim-setningen. Begge oppnår samme effekt, men omfanget er klarere når du leser koden hvis du bruker den private setningen.
 

Levetiden til en variabel

Tiden en variabel beholder verdien i, kalles levetiden. Verdien til en variabel kan endres i løpet av levetiden, men den beholder en verdi. Når en variabel 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 lengdestreng initialiseres til en tom streng (""), og en streng med fast lengde fylles med ASCII-koden 0. Variantvariabler initialiseres til Tom. En tom variabel representeres av en null i en numerisk kontekst og en tom streng ("") i en strengkontekst.

Variabler på prosedyrenivå

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

Følg disse trinnene for å vise 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()
        'angi x som en prosedyrenivåvariabel
       Dim x as integer
       MsgBox "den initialiserte verdien av x er " & x
       x = 10
        MsgBox "x is " & x
        Den neste linjen kjører Makro2
        Makro2
        MsgBox "x is still " & x
    End Sub
    Sub Macro2()
        MsgBox "x, som vist av Makro2 er " & x
    End Sub

  3. Kjør makro1.

  4. Du får følgende melding:

        the initialized value of x is 0

  5. Klikk OK, så får du meldingen:

     x is 10

  6. Klikk OK, og du får følgende melding:

    x, as seen by Macro2 is

  7. Klikk OK.

  8. Makro2 viser ikke en verdi for variabelen x fordi variabelen x er lokal til Makro1. Du får følgende melding:

    x is still 10

  9. Klikk på OK.

  10. Kjør makro1.

Du mottar de samme meldingene som er beskrevet i trinn 3 til 6, fordi så snart Makro1 sluttet å kjøre i trinn 6, gikk verdien av variabelen x tapt. Når du kjører Makro1 på nytt i trinn 7, viser derfor den første meldingen verdien av x som null (den initialiserte verdien).

Statisk nøkkelord

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

Følg disse trinnene for å se hvordan det statiske nøkkelordet fungerer:

  1. 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
  2. Kjør makro1.

  3. Du får meldingen:

    the initialized value of x is 0

  4. Klikk OK, så får du meldingen:

    x is 10

  5. Klikk på OK.

  6. Kjør makro1, og du får følgende melding:

    the initialized value of x is 10

  7. Klikk OK, så får du følgende melding:

    x is 20

  8. Klikk på OK.

Verdiene som vises i meldingene, er forskjellige andre gang fordi variabelen x deklareres som en statisk variabel, og variabelen beholder verdien etter at du kjører Makro1 første gang.

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

Følg disse trinnene for å bekrefte levetiden til en variabel på modulnivå:

  1. 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
  2. Kjør Makro1, så får du følgende melding:

    the initialized value of x is 0

  3. Klikk OK, så får du følgende melding:

    x is 10

  4. Klikk OK,

  5. Kjør Makro1, så får du denne meldingen:

    the initialized value of x is 10

  6. Klikk på OK.

  7. Du får følgende melding:

    x is 20

  8. Klikk på OK.

Verdiene som vises i meldingene, er forskjellige andre gang fordi variabelen x deklareres som en statisk variabel, og den beholder verdien etter at du kjører 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-knappen på
Standardverktøylinjen, eller klikk Tilbakestill på Kjør-menyen.

Hvis du gjør dette for Makro1-prosjektet og deretter kjører Makro1på nytt, initialiseres verdien av variabelen x tilbake til null, og du får den første meldingen:

    the initialized value of x is 0

Trenger du mer hjelp?

Utvid ferdighetene dine

Utforsk opplæring >

Vær først ute med de nye funksjonene

BLI MED I MICROSOFT INSIDERS >

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×