Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

Introduktion

I den här artikeln beskrivs hur du använder variabler Microsoft Excel underprocedurer i Microsoft Visual Basic for Applications.

Mer information

Variabler i en underprocedur

En kraftfull funktion i programmeringsspråk är möjligheten att lagra något i en variabel så att innehållet i variabeln kan användas eller ändras senare i proceduren. I det här dokumentet beskrivs följande användning av variabler i Visual Basic:

  • Hur variabler deklareras.

  • Procedurerna och de projekt som kan använda variabeln.

  • Livslängden för en variabel.

Deklarera en variabel i ett makro

Det enklaste sättet att deklarera en variabel i ett makro är att använda dim-satsen. Följande rad deklarerar två variabler, som heltal:

    Dim x As Integer, y As Integer

När x och y har angetts som heltal säger du till Visual Basic att det finns tillräckligt med minne för en heltalsvariabel (2 byte vardera för x och y) och att informationen som lagras i antingen x eller y är ett heltal mellan -32768 och 32767.

OBS! Om du deklarerar fler än en variabel med hjälp av en enda nedtonad sats måste du ange datatypen för varje variabel.

Om du inte anger datatypen för varje variabel, som i följande Visual Basic, är endast variabeln y inställd som en heltalsvariabel. Variabeln x kommer att vara en varianttyp:

    Dim x, y As Integer

Mer information finns i Variant datatyp nedan.
 

Utför ett variabeltest genom att följa de här stegen:

  1. Spara och stäng alla öppna arbetsböcker och öppna sedan en ny arbetsbok.

  2. Starta Visual Basic (tryck på ALT+F11).

  3. Klicka på ModulInfoga-menyn.

  4. Ange följande kod:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "värdet för x är " & x & _
        Chr(13) & "värdet på y är " & y
    End Sub

  5. Kör det Variable_Test makrot. Du får följande meddelande:

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

  6. Klicka på OK.

  7. I Variable_Test makrot ändras följande rad:

    x = 10

  8. till:

    x = "error"

  9. Kör det Variable_Test makrot.

Du får ett körningsfel eftersom "fel" inte är ett heltal och du försöker tilldela strängvärdet till heltalsvariabeln x.
 

Sammanfattning av datatyp

Det här är de vanliga variabla datatyperna:

vanliga variabeldatatyper

Variant-datatyp

Om du inte anger en datatyp när du deklarerar en variabel, eller om du inte deklarerar en variabel alls, anger Visual Basic automatiskt variantdatatypen för den här variabeln. Följande är fördelarna med variabler som deklareras som den här datatypen:

  • Variablerna kan innehålla sträng, datum, tid, booleska värden eller numeriska värden.

  • Variablerna kan konvertera de värden som de innehåller automatiskt.

Nackdelen är att variantvariabler kräver minst 16 byte minne. 16 byte minne kan vara betydande i stora procedurer eller i komplexa moduler.

Gör så här för att se hur Variable_Test fungerar i makrot:

Ändra koden i det Variable_Test makrot till:

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

Kör det Variable_Test makrot.

Du får inget felmeddelande eftersom du kan tilldela något till variantvariablerna x och y.

OBS! Du kan också lämna följande rad och makrot fungerar fortfarande när variablerna x och y behandlas som variant-datatyper:

    Dim x, y

En variabels omfattning

När du deklarerar en variabel kan den, eller kanske inte, ses av andra makron i samma modul, i andra moduler eller i andra projekt. Den här tillgängligheten för en variabel i moduler kallas för omfattning. De tre typerna av omfattning är procedurnivå, privat modulnivå och offentlig modulnivå. Omfattningen beror på hur och var du deklarerar variabeln eller variablerna.

Omfattning på procedurnivå

En variabel med omfattning på procedurnivå syns inte utanför proceduren där den deklareras. Om du anger värdet för en variabel som har omfattning på procedurnivå, visas inte variabelns innehåll för andra makron.

För att verifiera att en variabel med omfattning på procedurnivå inte syns utanför proceduren där den deklareras gör du så här:

  1. Infoga en ny modul i projektet.

  2. Skriv in båda följande makron i den här 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. Kör Makro1 så får du följande meddelande:

    x, as seen by Macro1 is 10

  4. Klicka på OKså får du följande meddelande:

    x, as seen by Macro2 is

  5. Klicka på OK.

Makro2 visar inte något värde för variabeln x eftersom variabeln x är lokal till Makro1.

Omfattning på privat och offentlig modulnivå

Du kan definiera variabler i deklarationsavsnittet för en modul (högst upp i en modul, ovanför alla underprocedurer) och ange omfattningen av variabeln med hjälp av public-satsen, nedtonad eller privat satsen. Om du ställer den offentliga satsen framför variabeln är variabeln tillgänglig för alla makron i alla moduler i projektet. Om du placera antingen nedtonad-satsen eller privat satsen framför variabeln, är variabeln bara tillgänglig för makron i modulen där den deklareras.

Gör så här för att se skillnaden mellan det offentliga uttrycket och dima uttrycket:

  1. Spara och stäng alla öppna arbetsböcker och öppna sedan en ny arbetsbok.

  2. Starta Visual Basic Editor.

  3. Infoga en modul i projektet.

  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. Infoga en ny modul i projektet.

  6. Skriv in följande kod i den här modulen:


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

  7. Kör Macro_1a makro i den första modulen.

  8. Med variabeln x deklarerad som "Offentlig x som heltal" har alla tre makrona i projektet tillgång till värdet x. Värdet 10 visas i den första meddelanderutan. I den andra meddelanderutan visas värdet 20 (eftersom x multipliceras med 2 i Macro_1b). I den tredje meddelanderutan visas värdet 60 (eftersom värdet för x ändrades till 20 i Macro_1b och sedan multiplicerades med 3 i Makro2).

  9. Ändra deklarationsraden i den första modulen från:

       Public x As Integer

    till:

       Dim x As Integer

  10. Kör det Macro_1a makrot.

  11. När variabeln x deklareras som "Nedtonad x som heltal" har bara makron i den första modulen tillgång till värdet för x. Värdet 10 visas i den första meddelanderutan och i den andra meddelanderutan visas värdet 20 (eftersom x multipliceras med 2 i Macro_1b) och i den tredje meddelanderutan visas värdet 0 (eftersom Makro2 inte ser värdet för x och det oinvigerade värdet 0 används av Makro 2).

  12. Ändra deklarationsraden i den första modulen från:

      Dim x As Integer

    till:

        Private x As Integer

  13. Kör det Macro_1a makrot.

  14. Samma meddelanderutor visas med omfånget Privat som när de använde dim-instruktionen. Variabeln x har samma omfattning, privat för modulen där den deklareras.


OBS! Om du vill att omfattningen av variabeln ska begränsas till modulen där den deklareras använder du privatestatement istället för dim-satsen. De båda uppnår samma effekt, men omfattningen är tydligare när du läser koden om du använder satsen Privat.
 

Livslängd för en variabel

Den tid då en variabel behåller sitt värde kallas för livslängd. Värdet för en variabel kan ändras under sin livslängd men det behåller ett värde. När en variabel förlorar sin omfattning har den inte längre ett värde.
 

Initiera värdet på en variabel

När du kör ett makro initieras alla variabler med ett värde. En numerisk variabel initieras till noll, en variabel längdsträng initieras till en sträng med längden noll (""), och en sträng med fast längd fylls med ASCII-koden 0. Variantvariabler initieras till Tom. En tom variabel representeras av en nolla i ett numeriskt sammanhang och en sträng med längden noll ("") i ett strängsammanhang.

Variabler på procedurnivå

Om du har en variabel som deklareras i ett makro med hjälp av satsen Nedtonad behåller variabeln sitt värde så länge makrot körs. Om det här makrot anropar andra makron behålls värdet på variabeln (inte tillgängligt för andra makron dock) så länge dessa andra makron också körs.

För att visa hur variabler på procedurnivå fungerar följer du de här stegen:

  1. Infoga en ny modul i projektet.

  2. Skriv in båda följande makron i den här modulen:

    Sub Macro1()
        'ange x som en variabel för procedurnivå
       Dim x As Integer
       MsgBox "det initialiserade värdet på x är " & x
       x = 10
        MsgBox "x is " & x
        'nästa rad kör Makro2
        Makro2
        MsgBox "x is still " & x
    End Sub
    Undermakro2()
        MsgBox "x, som sett av Makro2 är " & x
    End Sub

  3. Kör Makro1.

  4. Du får följande meddelande:

        the initialized value of x is 0

  5. Klicka på OKså får du meddelandet:

     x is 10

  6. Klicka på OKså får du följande meddelande:

    x, as seen by Macro2 is

  7. Klicka på OK.

  8. Makro2 visar inte något värde för variabeln x eftersom variabeln x är lokal till Makro1. Du får följande meddelande:

    x is still 10

  9. Klicka på OK.

  10. Kör Makro1.

Du får samma meddelanden som beskrivs i steg 3 till 6 eftersom värdet för variabeln x har gått förlorat så snart Makro1 slutade köras i steg 6. När du kör Makro1 igen i steg 7 visar det första meddelandet därför värdet på x som noll (det initierade värdet).

Statiskt nyckelord

Om en variabel på procedurnivå deklareras med hjälp av nyckelordet Statisk, behåller variabeln sitt värde tills projektet återställs. Om du har en statisk variabel initieras den statiska variabeln därför till det sista värdet nästa gång du anropar proceduren.

Gör så här för att se hur det statiska nyckelordet fungerar:

  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. Kör Makro1.

  3. Du får meddelandet:

    the initialized value of x is 0

  4. Klicka på OKså får du meddelandet:

    x is 10

  5. Klicka på OK.

  6. Kör Makro1 och du får följande meddelande:

    the initialized value of x is 10

  7. Klicka på OKså får du följande meddelande:

    x is 20

  8. Klicka på OK.

De värden som visas i meddelandena skiljer sig åt den andra gången eftersom variabeln x deklareras som en statisk variabel och variabeln behåller sitt värde efter att du kört Makro1 första gången.

OBS!  Om du har en variabel på modulnivå är dess livslängd densamma som om den var en statisk variabel på procedurnivå.

Så här verifierar du livslängden för 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. Kör Makro1 så får du följande meddelande:

    the initialized value of x is 0

  3. Klicka på OK så får du följande meddelande:

    x is 10

  4. Klicka på OK,

  5. Kör Makro1 så får du det här meddelandet:

    the initialized value of x is 10

  6. Klicka på OK.

  7. Du får följande meddelande:

    x is 20

  8. Klicka på OK.

De värden som visas i meddelandena skiljer sig åt den andra gången eftersom variabeln x deklareras som en statisk variabel och den behåller sitt värde efter att du kört Makro1 första gången.
 

Återställa ett projekt för att återställa variabler

Om du vill återställa värdet för en statisk variabel eller för en variabel på modulnivå klickar du på knappen Återställ på
Standardverktygsfältet eller klicka på Återställ på menyn Kör.

Om du gör det för Makro1-projektet och sedan kör Makro1igen initieras värdet för variabeln x tillbaka till noll och du får det första meddelandet:

    the initialized value of x is 0

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×