Johdanto
Tässä artikkelissa kerrotaan, miten voit käyttää muuttujia Microsoft Excel alimenettelyissä Microsoft Visual Basic for Applications.
Lisätietoja
Alimenettelyn muuttujat
Ohjelmointikielten tehokas ominaisuus on mahdollisuus tallentaa jotakin muuttujaan, jotta muuttujan sisältöä voidaan käyttää tai sitä voi muuttaa myöhemmin toimintosarjassa. Tässä asiakirjassa käsitellään seuraavia muuttujien käyttöä Visual Basic:
-
Muuttujien ilmoittaminen.
-
Toimenpiteet ja projektit, jotka voivat käyttää muuttujaa.
-
Muuttujan elinaika.
Muuttujan määrittäminen makrossa
Yksinkertaisin tapa määrittää muuttuja makrossa on käyttää Dim-lauseketta. Seuraava rivi määrittää kaksi muuttujaa kokonaisluvuiksi:
Dim x As Integer, y As Integer
Kun x- ja y-arvot on määritetty kokonaisluvuiksi, Visual Basic:tä varaamaan riittävästi muistia kokonaislukumuuttujalle (2 tavua x:lle ja y:lle) ja että tiedot, jotka on tallennettu joko x:iin tai y:iin, ovat kokonaislukuja väliltä -32768–32767.
HUOMAUTUS: Jos määrität useamman kuin yhden muuttujan käyttämällä yhtä Dim-lauseketta, sinun on määritettävä kunkin muuttujan tietotyyppi.
Jos et määritä kunkin muuttujan tietotyyppiä, kuten seuraavassa Visual Basic, vain muuttuja y määritetään kokonaislukumuuttujaksi. Muuttuja x on muunnelmatyyppi:
Dim x, y As Integer
Lisätietoja on alla kohdassa Variant-tietotyyppi.
Jos haluat suorittaa muuttujatestin, toimi seuraavasti:
-
Tallenna ja sulje kaikki avoimet työkirjat ja avaa sitten uusi työkirja.
-
Käynnistä Visual Basic (paina ALT + F11).
-
Valitse Lisää-valikossaModuuli.
-
Kirjoita seuraava koodi:
Sub Variable_Test()
Himmennä x kokonaislukuna, y kokonaislukuna
x = 10
y = 100
MsgBox "x:n arvo on " & x & _
Chr(13) & "y:n arvo on " & y
End Sub -
Suorita Variable_Test makro. Näyttöön tulee seuraava viesti:
the value of x is 10
the value of y is 100 -
Valitse OK.
-
Muuta Variable_Test seuraava rivi:
x = 10 -
to:
x = "error" -
Suorita Variable_Test makro.
Näyttöön tulee suorituksenaikainen virhe, koska "virhe" ei ole kokonaisluku, ja yrität määrittää tämän merkkijonoarvon kokonaislukumuuttujalle x.
Tietotyypin yhteenveto
Nämä ovat yleisiä muuttuvia tietotyyppejä:
Variant-tietotyyppi
Jos et määritä tietotyyppiä, kun määrität muuttujan tai et määritä muuttujaa lainkaan, Visual Basic määrittää tämän muuttujan variantin tietotyypin automaattisesti. Seuraavat ovat tietotyypiksi määritettyjen muuttujien etuja:
-
Muuttujat voivat sisältää merkkijono-, päivämäärä-, aika-, totuusarvo- tai numeerisia arvoja.
-
Muuttujat voivat muuntaa automaattisesti sisältävät arvot.
Haittana on se, että muuttujat edellyttävät vähintään 16 tavua muistia. 16 tavua muistia voi olla merkitsevä suurissa menettelyissä tai monimutkaisissa moduuleissa.
Jos haluat nähdä, miten tämä toimii Variable_Test makrossa, toimi seuraavasti:
Muuta makron Variable_Test täksi:
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
Suorita Variable_Test makro.
Et saa virhettä, koska voit määrittää mitään muuttujalle x ja y.
HUOMAUTUS: Voit myös jättää seuraavan rivin pois, ja makro toimii edelleen, kun muuttujia x ja y käsitellään Variant-tietotyyppenä:
Dim x, y
Muuttujan laajuus
Kun määrität muuttujan, muut saman moduulin, muiden moduulien tai muiden projektien makrot eivät ehkä voi nähdä sitä. Tätä muuttujan käytettävuutta moduuleissa kutsutaan laajuudeksi. Nämä kolme vaikutusaluetta ovat toimintosarjataso, yksityinen moduulitaso ja julkinen moduulitaso. Laajuus määräytyy sen mukaan, miten ja missä muuttujat määrittyvät.
Toimintotason laajuus
Toimintosarjatason vaikutusalueen muuttujaa ei nähdä toimintosarjaa, jossa se on määritetty. Jos määrität sellaisen muuttujan arvon, jolla on toimintosarjatason laajuus, muut makrot eivät voi nähdä tämän muuttujan sisältöä.
Jos haluat varmistaa, että toimintosarjatason laajuutta vaihtelevaa muuttujaa ei nähdä sen toimintomenettelyn ulkopuolella, jossa se on määritetty, toimi seuraavasti:
-
Lisää projektiin uusi moduuli.
-
Kirjoita molemmat seuraavista makroista tähän moduuliin:
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 -
Kun suoritat Makro1-komennon, näyttöön tulee seuraava sanoma:
x, as seen by Macro1 is 10 -
Kun valitset OK,näyttöön tulee seuraava sanoma:
x, as seen by Macro2 is -
Valitse OK.
Makro2 ei näytä muuttujan x arvoa, koska muuttuja x on paikallinen arvoksi Macro1.
Yksityisen ja julkisen moduulitason laajuus
Voit määrittää muuttujia moduulin määrittelyosiossa (moduulin yläosassa kaikkien alimenetelmien yläpuolella) ja määrittää muuttujan laajuuden käyttämällä julkista lauseketta, Dim-lauseketta tai yksityistä lauseketta. Jos asetat julkisen lauseketta muuttujan eteen, muuttujasi on käytettävissä kaikissa projektin moduuleissa. Jos asetat joko Dim-lauseketta tai Private-lauseketta muuttujan eteen, muuttujasi on käytettävissä vain moduulissa, jossa se on määritelty.
Jos haluat nähdä julkisen otteen ja Dim-lausekeen välisen eron, toimi seuraavasti:
-
Tallenna ja sulje kaikki avoimet työkirjat ja avaa sitten uusi työkirja.
-
Käynnistä Visual Basic muokkaus.
-
Lisää projektiin moduuli.
-
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
-
Lisää toinen moduuli projektiin.
-
Kirjoita seuraava koodi tähän moduuliin:
Sub Macro2() x = x * 3
MsgBox x
End Sub -
Suorita Macro_1a makro ensimmäisessä moduulissa.
-
Kun muuttujan x on määritetty julkiseksi x kokonaislukuna, kaikilla kolmella projektin makrolla on käyttöoikeus x:n arvoon. Ensimmäisessä viestiruudussa näkyy arvo 10. Toisessa sanomaruudussa näkyy arvo 20 (koska x kerrotaan arvolla 2 arvolla Macro_1b). Kolmannen viestin ruudussa näkyy arvo 60 (koska x:n arvo on muutettu arvoksi 20 Macro_1b sitten se kerrottiin 3:lla Makro2:ssa).
-
Ensimmäisen moduulin ilmoitusrivin muuttaminen:
Public x As Integer
to:
Dim x As Integer -
Suorita Macro_1a makro.
-
Kun muuttujan x on määritetty dim x kokonaislukuna, vain ensimmäisen moduulin makroilla on pääsy x:n arvoon. Ensimmäisessä sanomaruudussa näkyy arvo 10, toisessa sanomaruudussa näkyy arvo 20 (koska x kerrotaan luvulla 2 Macro_1b:ssä) ja kolmannessa sanomaruudussa näkyy arvo 0 (koska Makro2 ei näe x:n arvoa ja makro 2 käyttää nollan alustamaton arvoa).
-
Ensimmäisen moduulin ilmoitusrivin muuttaminen:
Dim x As Integer
jos haluat:
Private x As Integer -
Suorita Macro_1a makro.
-
Samat sanomaruudut näytetään käyttämällä Yksityinen-lauseketta samalla tavalla kuin Dim-lauseketta. Muuttujalla x on sama laajuus, joka on yksityinen moduulissa, jossa se on määritetty.
HUOMAUTUS: Jos haluat, että muuttujan laajuus rajoittuu moduuliin, jossa se on määritetty, käytä Privatestatement-lauseketta Dim-lauseketta. Ne molemmat saavuttavat saman tehosteen, mutta laajuus on selkeämpi, kun luet koodin, jos käytät Yksityistä lauseketta.
Muuttujan elinaika
Aika, jonka aikana muuttuja säilyttää arvon, tunnetaan nimellä sen elinaika. Muuttujan arvo voi muuttua elinkaarensa aikana, mutta se säilyttää arvon. Lisäksi jos muuttuja menettää vaikutusalueen, sillä ei ole enää arvoa.
Muuttujan arvon alustaminen
Kun suoritat makron, kaikki muuttujat alustetaan arvoon. Numeerinen muuttuja alustetaan nollaksi, muuttuvan pituinen merkkijono alustetaan tyhjäksi merkkijonoksi ("") ja kiinteän pituinen merkkijono täytetään ASCII-koodilla 0. Varianttimuuttujat alustetaan arvoksi Tyhjä. Tyhjä muuttuja esitetään nollalla numeerisessa kontekstissa ja tyhjä merkkijono ("") merkkijonokontekstissa.
Toimintotason muuttujat
Jos makrossa on määritetty muuttuja Dim-lauseketta käyttämällä, muuttuja säilyttää sen arvon niin kauan kuin makro suoritetaan. Jos tämä makro kutsuu muita makroja, muuttujan arvo säilytetään (ei kuitenkaan käytettävissä muissa makroissa), kunhan myös muut makrot ovat käynnissä.
Voit havainnollistaa toimintotason muuttujien toimimis toimimalla seuraavasti:
-
Lisää projektiin uusi moduuli.
-
Kirjoita molemmat seuraavista makroista tähän moduuliin:
Sub Macro1()
'määritä x toimintosarjatason muuttujaksi
Dim x As Integer
MsgBox "initialized value of x is " & x
x = 10
MsgBox "x is " & x
'seuraava rivi suorittaa Macro2:n
Makro2
MsgBox "x on edelleen " & x
End Sub
Alimakro2()
MsgBox "x, kuten Macro2 on nähnyt on " & x
End Sub -
Suorita Makro1.
-
Näyttöön tulee seuraava viesti:
the initialized value of x is 0 -
Valitse OK,niin saat viestin:
x is 10 -
Kun valitset OK,näyttöön tulee seuraava sanoma:
x, as seen by Macro2 is -
Valitse OK.
-
Makro2 ei näytä muuttujan x arvoa, koska muuttuja x on paikallinen arvoksi Macro1. Näyttöön tulee seuraava sanoma:
x is still 10 -
Valitse OK.
-
Suorita Makro1.
Saat samat viestit, jotka on kuvattu vaiheissa 3–6, koska heti, kun Macro1 lakkasi suorittamasta vaiheessa 6, muuttujan x arvo menetettiin. Kun makro1 suoritetaan uudelleen vaiheessa 7, ensimmäisessä sanomassa näkyy arvo x nollana (alustettu arvo).
Staattinen avainsana
Jos toimintosarjatason muuttuja on määritetty staattisen avainsanan avulla, muuttuja säilyttää sen arvon, kunnes projekti palautetaan. Jos siis käytät staattista muuttujaa, staattinen muuttuja alustetaan viimeiseen arvoonsa, kun seuraavan kerran kutsut toimintosarjaa.
Jos haluat nähdä, miten staattinen avainsana toimii, toimi seuraavasti:
-
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
-
Suorita Makro1.
-
Saat viestin:
the initialized value of x is 0 -
Valitse OK,niin saat viestin:
x is 10 -
Valitse OK.
-
Kun suoritat Macro1:n, näyttöön tulee seuraava
the initialized value of x is 10 -
Kun valitset OK,näyttöön tulee seuraava sanoma:
x is 20 -
Valitse OK.
Viesteissä näkyvät arvot ovat eri kuin toisen kerran, koska muuttuja x on määritetty staattisen muuttujan arvoksi ja muuttuja säilyttää sen arvon, kun olet suorituksen aikana Makro1 ensimmäisen kerran.
HUOMAUTUS: Jos sinulla on moduulitason muuttuja, sen elinaika on sama kuin staattinen toimintosarjatason muuttuja.
Voit tarkistaa moduulitason muuttujan elinkaaren seuraavasti:
-
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
-
Kun suoritat Macro1:n, näyttöön tulee seuraava sanoma:
the initialized value of x is 0 -
Kun valitset OK, näyttöön tulee seuraava viesti:
x is 10 -
Valitse OK.
-
Kun suoritat Makro1:n, näyttöön tulee seuraava
the initialized value of x is 10 -
Valitse OK.
-
Näyttöön tulee seuraava viesti:
x is 20 -
Valitse OK.
Viesteissä näkyvät arvot ovat eri kuin toisen kerran, koska muuttuja x on määritetty staattisen muuttujan arvoksi ja se säilyttää sen arvon, kun olet suorituksen aikana Makro1 ensimmäisen kerran.
Projektin palauttaminen muuttujien nollaamista varten
Jos haluat palauttaa staattisen muuttujan tai moduulitason muuttujan arvon, napsauta Palauta-painiketta
Vakiotyökalurivi tai valitse Suorita-valikosta Palauta.
Jos teet näin Macro1-projektissa ja sitten suoritetaan Makro1uudelleen , muuttujan x arvo alustetaan takaisin nollaksi ja saat ensimmäisen viestin:
the initialized value of x is 0