Olet tällä hetkellä offline-tilassa. Internet-yhteyden muodostamista uudelleen odotetaan

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

Office 2003:n tuki on päättynyt

Microsoft lopetti Office 2003:n tuen 8.4.2014. Tämä muutos on vaikuttanut ohjelmistopäivityksiin ja suojausasetuksiin. Lue lisätietoja muutoksen vaikutuksesta ja suojauksen varmistamisesta.

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

Palaa alkuun
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ä.
Palaa alkuun

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 Integerx = 10y = 100MsgBox "muuttujan x arvo on " & x & _Chr(13) & "muuttujan y arvo on " & yEnd 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.

Palaa alkuun

Tietolajien yhteenveto

Seuraavassa taulukossa on lueteltu yleiset muuttujien tietolajit:

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

Palaa alkuun

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, yx = "merkkijono"y = 1,23MsgBox "muuttujan x arvo on " & x & _Chr(13) & "muuttujan y arvo on " & yEnd 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

Palaa alkuun

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.

Palaa alkuun

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 Integerx = 10MsgBox "x Macro1-makron näkemänä on " & x'seuraava rivi suorittaa Macro2-makronMacro2End SubSub Macro2()MsgBox "x Macro2-makron näkemänä on " & xEnd 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.

Palaa alkuun

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 IntegerSub Macro_1a()x = 10MsgBox xMacro_1bEnd SubSub Macro_1b()x = x * 2MsgBox xMacro2End Sub
  5. Lisää toinen moduuli projektiisi.
  6. Kirjoita seuraava koodi kyseiseen moduuliin:
    Sub Macro2()x = x * 3MsgBox xEnd 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.

Palaa alkuun

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.

Palaa alkuun

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 ("").

Palaa alkuun

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 muuttujaksiDim x As Integer   MsgBox "muuttujan x alustettu arvo on " & x & _x = 10MsgBox "x on " & x'seuraava rivi suorittaa Macro2-makronMacro2MsgBox "x on yhä " & xEnd SubSub Macro2()MsgBox "x Macro2-makron näkemänä on " & xEnd 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.

Palaa alkuun

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 muuttujaksiStatic x As Integer   MsgBox "muuttujan x alustettu arvo on " & x & _x = x + 10MsgBox "x on " & xEnd 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 muuttujaSub Macro1()   MsgBox "muuttujan x alustettu arvo on " & x & _x = x + 10MsgBox "x on " & xEnd 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.

Palaa alkuun

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)
sub procedures VBA variables var xl2007 xl2003 xl2000 xl2002 xl
Ominaisuudet

Artikkelin tunnus: 843144 – Viimeisin tarkistus: 06/03/2008 14:41:42 – Versio: 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

  • kbvba kbprogramming kbinfo KB843144
Palaute
t type='text/javascript' src='" + (window.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");