Muuttujien käyttäminen Visual Basic for Applicationsin Excel-aliohjelmatoimintosarjoissa

Artikkeleiden käännökset Artikkeleiden käännökset
Artikkelin tunnus: 843144 - Näytä tuotteet, joita tämä artikkeli koskee.
Laajenna kaikki | Kutista kaikki

Tällä sivulla

ESITTELY

Tässä artikkelissa on tietoja muuttujien käyttämisestä Microsoft Visual Basic for Applicationsin Microsoft Excel -aliohjelmatoimintosarjoissa.

Enemmän tietoa

Aliohjelmatoimintosarjan muuttujat

Tehokas ohjelmointikielten ominaisuus on kyky tallentaa jotakin muuttujaan, jotta muuttujan sisältöä voidaan käyttää tai muuttaa myöhemmin toimintosarjassa. Tässä asiakirjassa käsitellään seuraavaa muuttujien käyttöä Visual Basicissa:
  • muuttujien määrittäminen
  • muuttujaa käyttämään pystyvät toimintosarjat ja projektit
  • muuttujan käyttöikä.

Makron muuttujan määrittäminen

Yksinkertaisin tapa määrittää makron muuttuja on käyttää Dim-lauseketta. Seuraava rivi määrittää kokonaisluvuiksi kaksi muuttujaa, x:n ja y:n:
Dim x As Integer, y As Integer
Kun x ja y on määritetty kokonaisluvuiksi, Visual Basicille kerrotaan, että kokonaislukumuuttujalle pitää sijoittaa tarpeeksi muistia sivuun (2 tavua x:lle ja y:lle) ja että muuttujaan x tai y tallennettu tieto on kokonaisluku välillä -32 768 - 32 767.

Huomautus Jos määrität useamman kuin yhden muuttujan yksittäisen Dim-lausekkeen avulla, sinun on määritettävä kunkin muuttujan tietolaji.

Jos et määritä kunkin muuttujan tietolajia, kuten seuraavassa Visual Basic -koodissa, vain muuttuja y määritetään kokonaislukumuuttujaksi. Muuttujan x laji on variantti:
Dim x, y As Integer
Lisätietoja on "Varianttitietolaji"-osassa.

Voit tehdä muuttujatestin seuraavasti:
  1. Tallenna ja sulje avoimet työkirjat. Avaa sitten uusi työkirja.
  2. Käynnistä Visual Basic Editor (paina ALT+F11).
  3. Valitse Lisää-valikosta Moduuli.
  4. Kirjoita seuraava koodi:
    Sub Variable_Test()
    Dim x As Integer, y As Integer
    x = 10
    y = 100
    MsgBox "muuttujan x arvo on " & x & _
    Chr(13) & "muuttujan y arvo on " & y
    End Sub
  5. Suorita Variable_Test-makro. Näyttöön tulee seuraava sanoma:
    muuttujan x arvo on 10
    muuttujan y arvo on 100
  6. Valitse OK.
  7. Muuta Variable_Test-makron seuraava rivi:
    x = 10
    

    seuraavaan muotoon:
    x = "virhe"
    
  8. Suorita Variable_Test-makro.
Näyttöön tulee suorituksenaikainen virhe, koska "virhe" ei ole kokonaislukumuuttuja, ja yrität määrittää tämän merkkijonoarvon kokonaislukumuuttujalle x.

Tietolajien yhteenveto

Seuraavassa taulukossa on lueteltu yleiset muuttujien tietolajit:

Kutista tämä taulukkoLaajenna tämä taulukko
TietolajiSäilön kokoSallittu alue
Totuusarvo 2 tavua Tosi (true) tai epätosi (false)
Kokonaisluku 2 tavua -32 768 - 32 767
Pitkä 4 tavua -2 147 483 648 - 2 147 483 647
Kaksois 8 tavua -1,79769313486232E308 - -4,94065645841247E-324 negatiivisille arvoille ja 4,94065645841247E-324 - 1,79769313486232E308 positiivisille arvoille
Valuutta 8 tavua -922 337 203 685 477,5808 - 922 337 203 685 477,5807
Päiväys 8 tavua 1.1.100 - 31.12.9999
Merkkijono 10 tavua + merkkijonon pituus

Varianttitietolaji

Jos et määritä tietolajia määrittäessäsi muuttujan tai jos et määritä muuttujaa lainkaan, Visual Basic määrittää muuttujalle varianttitietolajin automaattisesti. Täksi tietolajiksi määritettyjen muuttujien edut ovat seuraavat:
  • Muuttujat voivat sisältää merkkijono-, päivämäärä-, kellonaika- tai totuusarvoarvoja tai numeerisia arvoja.
  • Muuttujat pystyvät muuntamaan sisältämänsä arvot automaattisesti.
Haittana on se, että varianttimuuttujat tarvitsevat vähintään 16 tavua muistia. 16 tavun muistivaatimus voi muodostua merkittäväksi suurissa toimintosarjoissa tai monimutkaisissa moduuleissa.

Voit tarkastella, miten tämä toimii Variable_Test-makron kanssa, toimimalla seuraavasti:
  1. Muuta Variable_Test-makron koodi seuraavaksi koodiksi:
    Sub Variable_Test()
    Dim x, y
    x = "merkkijono"
    y = 1,23
    MsgBox "muuttujan x arvo on " & x & _
    Chr(13) & "muuttujan y arvo on " & y
    End Sub
    
  2. Suorita Variable_Test-makro.
Näyttöön ei tule virhesanomaa, koska pystyt määrittämään varianttimuuttujille x ja y mitä tahansa arvoja.

Huomautus Voit myös jättää seuraavan rivin pois. Makro toimii silti, koska muuttujat x ja y käsitellään varianttitietolajeina:
Dim x, y

Muuttujan laajuus

Kun määrität muuttujan, muut saman moduulin, muiden moduulien tai muiden projektien makrot saattavat pystyä näkemään sen. Tätä moduulien muuttujan käytettävyyttä kutsutaan laajuudeksi. Laajuuden tyypit ovat toimintosarjan, yksityisen moduulin ja yleisen moduulin taso. Laajuus määrittyy sen mukaan, miten ja missä muuttuja tai muuttujat määritetään.

Toimintosarjatason laajuus

Toimintosarjatason laajuutta olevaa muuttujaa ei nähdä sen toimintosarjan ulkopuolelta, jossa se on määritetty. Jos määrität toimintosarjantason laajuutta olevan muuttujan arvon, muut makrot eivät pysty näkemään muuttujan sisältöä.

Voit tarkistaa, että toimintosarjatason laajuutta olevaa muuttujaa ei nähdä sen toimintosarjan ulkopuolelta, jossa se on määritetty, toimimalla seuraavasti:
  1. Lisää uusi moduuli projektiisi.
  2. Kirjoita kyseiseen moduuliin molemmat seuraavista makroista:
    Sub Macro1()
    Dim x As Integer
    x = 10
    MsgBox "x Macro1-makron näkemänä on " & x
    'seuraava rivi suorittaa Macro2-makron
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x Macro2-makron näkemänä on " & x
    End Sub
    
  3. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    x Macro1-makron näkemänä on 10
  4. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x Macro2-makron näkemänä on
  5. Valitse OK.
Macro2 ei näytä muuttujan x arvoa, koska muuttuja x on Macro1-makron paikallinen muuttuja.

Yksityisen ja yleisen moduulitason laajuus

Voit määrittää muuttujia moduulin määritysosassa (moduulin alussa ennen kaikkia alitoimintosarjoja) ja määrittää muuttujan laajuuden Public-, Dim- tai Private-lausekkeen avulla. Jos sijoitat Public-lausekkeen ennen muuttujaasi, muuttuja tulee olemaan kaikkien projektin moduulien makrojen käytettävissä. Jos sijoitat Dim- tai Private-lausekkeen ennen muuttujaasi, muuttuja on käytettävissä vain sen moduulin makroissa, jossa se on määritetty.

Voit tarkastella Public- ja Dim-lausekkeiden eroja seuraavasti:
  1. Tallenna ja sulje avoimet työkirjat. Avaa sitten uusi työkirja.
  2. Käynnistä Visual Basic Editor.
  3. Lisää moduuli projektiisi.
  4. Kirjoita seuraava koodi kyseiseen moduuliin:
    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. Lisää toinen moduuli projektiisi.
  6. Kirjoita seuraava koodi kyseiseen moduuliin:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Suorita ensimmäisen moduulin Macro_1a-makro.

    Kun muuttuja x on määritetty muodossa "Public x As Integer", kaikki projektin kolme makroa pystyvät käyttämään muuttujan x arvoa. Ensimmäisessä sanomaruudussa näkyy arvo 10. Toisessa sanomaruudussa näkyy arvo 20 (koska x kerrotaan kahdella makrossa Macro_1b). Kolmannessa sanomaruudussa näkyy arvo 60 (koska muuttujan x arvo muuttui arvoksi 20 makrossa Macro_1b-makrossa ja kerrottiin sitten kolmella makrossa Macro2).
  8. Muuta ensimmäisen moduulin määritysrivi muodosta:
    Public x As Integer

    seuraavaan muotoon:
    Dim x As Integer
  9. Suorita makro Macro_1a.

    Kun muuttuja x on määritetty muodossa "Dim x As Integer", vain ensimmäisen moduulin makrot pystyvät käyttämään muuttujan x arvoa. Ensimmäisessä sanomaruudussa siis näkyy arvo 10, toisessa arvo 20 (koska x kerrotaan kahdella makrossa Macro_1b) ja kolmannessa arvo 0 (koska Macro2 ei näe muuttujan x arvoa ja Macro2 käyttää alustamatonta arvoa 0).
  10. Muuta ensimmäisen moduulin määritysrivi muodosta:
    Dim x As Integer

    seuraavaan muotoon:
    Private x As Integer
  11. Suorita makro Macro_1a.
Lausekkeen laajuutta Private käyttäen näytetään samat sanomaruudut kuin lauseketta Dim käytettäessä. Muuttujalla x on sama laajuus, joka on yksityinen moduulille, jossa se on määritetty.

Huomautus Jos haluat, että muuttujan laajuus rajoitetaan moduuliin, jossa se on määritetty, käytä Private-lauseketta Dim-lausekkeen sijaan. Niillä molemmilla on sama vaikutus, mutta laajuus on selkeämpi, kun luet koodia käyttäessäsi Private-lauseketta.

Muuttujan käyttöikä

Aika, jonka muuttuja säilyttää arvonsa, on sen käyttöikä. Muuttujan arvo saattaa muuttua sen käyttöiän aikana, mutta arvo säilytetään. Kun muuttuja menettää laajuuden, sillä ei enää ole arvoa.

Muuttujan arvon alustaminen

Kun suoritat makron, kaikki muuttujat alustetaan johonkin arvoon. Numeerinen muuttuja alustetaan arvoon nolla, muuttujan pituusmerkkijono alustetaan pituudeksi nolla ("") ja kiinteänpituinen muuttuja täytetään ASCII-koodilla 0. Varianttimuuttujat alustetaan tyhjiksi. Tyhjää muuttujaa ilmaisee numeerisessa kontekstissa nolla ja merkkijonokontekstissa merkkijono, jonka pituus on nolla ("").

Toimintosarjatason muuttujat

Jos käytössäsi on muuttuja, joka on määritetty makrossa Dim-lausekkeen avulla, muuttuja säilyttää arvonsa niin kauan kuin makroa suoritetaan. Jos tämä makro kutsuu muita makroja, muuttujan arvo säilytetään (mutta se ei ole käytettävissä muille makroille) niin kauan kuin kyseisiä muita makroja suoritetaan.

Voit kokeilla toimintosarjatason muuttujien toimintaa seuraavasti:
  1. Lisää uusi moduuli projektiisi.
  2. Kirjoita kyseiseen moduuliin molemmat seuraavista makroista:
    Sub Macro1()
    'määritä x toimintosarjatason muuttujaksi
    Dim x As Integer
       MsgBox "muuttujan x alustettu arvo on " & x & _
    x = 10
    MsgBox "x on " & x
    'seuraava rivi suorittaa Macro2-makron
    Macro2
    MsgBox "x on yhä " & x
    End Sub
    Sub Macro2()
    MsgBox "x Macro2-makron näkemänä on " & x
    End Sub
    
  3. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    muuttujan x alustettu arvo on 0
  4. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x on 10
  5. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x Macro2-makron näkemänä on
  6. Valitse OK.

    Macro2 ei näytä muuttujan x arvoa, koska muuttuja x on Macro1-makron paikallinen muuttuja. Näyttöön tulee seuraava sanoma:
    x on yhä 10
  7. Valitse OK.
  8. Suorita Macro1.
Vaiheissa 3 - 6 kuvatut sanomat tulevat näyttöön, koska makron Macro1 suorittamisen päätyttyä vaiheessa 6 muuttujan x arvo menetettiin. Tämän vuoksi, kun suoritat makron Macro1 vaiheessa 7, muuttujan x arvo on nolla (alustettu arvo) ensimmäisessä sanomassa.

Static-avainsana

Jos toimintosarjatason muuttuja määritetään Static-avainsanan avulla, muuttuja säilyttää arvonsa, kunnes projekti nollataan. Tämän vuoksi, jos muuttuja on staattinen, kun seuraavan kerran kutsut toimintosarjaasi, kyseinen muuttuja alustetaan sen viimeisimpään arvoon.

Voit tarkastella Static-avainsanan toimintaan seuraavasti:
  1. Muuta makron Macro1 koodi seuraavaksi koodiksi:
    Sub Macro1()
    'määritä x toimintosarjatason muuttujaksi
    Static x As Integer
       MsgBox "muuttujan x alustettu arvo on " & x & _
    x = x + 10
    MsgBox "x on " & x
    End Sub
    
  2. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    muuttujan x alustettu arvo on 0
  3. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x on 10
  4. Valitse OK.
  5. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    muuttujan x alustettu arvo on 10
  6. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x on 20
  7. Valitse OK.
Sanomissa näytettävät arvot ovat erilaiset toisella kerralla, koska muuttuja x on määritetty staattiseksi muuttujaksi ja koska se säilyttää arvonsa makron Macro1 ensimmäisen suorituskerran jälkeen.

Huomautus Jos käytössäsi on moduulitason muuttuja, sen käyttöikä on sama kuin jos se olisi staattinen toimintosarjatason muuttuja.

Voit tarkistaa moduulitason muuttujan käyttöiän seuraavasti:
  1. Muuta makron Macro1 sisältävän moduulin koodi seuraavaksi:
    Dim x As Integer  'luo moduulitason muuttuja
    Sub Macro1()
       MsgBox "muuttujan x alustettu arvo on " & x & _
    x = x + 10
    MsgBox "x on " & x
    End Sub
    
  2. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    muuttujan x alustettu arvo on 0
  3. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x on 10
  4. Valitse OK.
  5. Suorita Macro1.

    Näyttöön tulee seuraava sanoma:
    muuttujan x alustettu arvo on 10
  6. Valitse OK.

    Näyttöön tulee seuraava sanoma:
    x on 20
  7. Valitse OK.
Sanomissa näytettävät arvot ovat erilaiset toisella kerralla, koska muuttuja x on määritetty staattiseksi muuttujaksi ja koska se säilyttää arvonsa makron Macro1 ensimmäisen suorituskerran jälkeen.

Projektin nollaaminen muuttujien nollaamista varten

Jos haluat palauttaa staattisen tai moduulitason muuttujan alkutilaan, napsauta Vakio-työkalurivin Nollaa-painiketta tai valitse Suorita-valikosta Palauta alkutilaan.

Jos teet tämän Macro1-projektille ja suoritat sitten makron Macro1 uudelleen, muuttujan x arvo alustetaan takaisin nollaksi ja ensimmäinen sanoma tulee näyttöön:
muuttujan x alustettu arvo on 0
Saat lisätietoja napsauttamalla seuraavaa artikkelin numeroa, jolloin pääset lukemaan artikkelin Microsoft Knowledge Base -tietokannassa:
843145 Visual Basic for Applicationsin (taulukot) Excel-alitoimintosarjojen kuvaus (tämä artikkeli saattaa olla englanninkielinen)
Palaa alkuun

Ominaisuudet

Artikkelin tunnus: 843144 - Viimeisin tarkistus: 3. kesäkuuta 2008 - Versio: 3.0
Artikkelin tiedot koskevat seuraavia tuotteita:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Hakusanat: 
kbvba kbprogramming kbinfo KB843144

Anna palautetta

 

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