Kirjaudu sisään Microsoft-tilillä
Kirjaudu sisään tai luo tili.
Hei,
Käytä toista tiliä.
Sinulla on useita tilejä
Valitse tili, jolla haluat kirjautua sisään.

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:

  1. Tallenna ja sulje kaikki avoimet työkirjat ja avaa sitten uusi työkirja.

  2. Käynnistä Visual Basic (paina ALT + F11).

  3. Valitse Lisää-valikossaModuuli.

  4. 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

  5. Suorita Variable_Test makro. Näyttöön tulee seuraava viesti:

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

  6. Valitse OK.

  7. Muuta Variable_Test seuraava rivi:

    x = 10

  8. to:

    x = "error"

  9. 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ä:

yleiset muuttujan tietotyypit

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:

  1. Lisää projektiin uusi moduuli.

  2. 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

  3. Kun suoritat Makro1-komennon, näyttöön tulee seuraava sanoma:

    x, as seen by Macro1 is 10

  4. Kun valitset OK,näyttöön tulee seuraava sanoma:

    x, as seen by Macro2 is

  5. 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:

  1. Tallenna ja sulje kaikki avoimet työkirjat ja avaa sitten uusi työkirja.

  2. Käynnistä Visual Basic muokkaus.

  3. Lisää projektiin moduuli.

  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. Lisää toinen moduuli projektiin.

  6. Kirjoita seuraava koodi tähän moduuliin:


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

  7. Suorita Macro_1a makro ensimmäisessä moduulissa.

  8. 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).

  9. Ensimmäisen moduulin ilmoitusrivin muuttaminen:

       Public x As Integer

    to:

       Dim x As Integer

  10. Suorita Macro_1a makro.

  11. 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).

  12. Ensimmäisen moduulin ilmoitusrivin muuttaminen:

      Dim x As Integer

    jos haluat:

        Private x As Integer

  13. Suorita Macro_1a makro.

  14. 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:

  1. Lisää projektiin uusi moduuli.

  2. 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

  3. Suorita Makro1.

  4. Näyttöön tulee seuraava viesti:

        the initialized value of x is 0

  5. Valitse OK,niin saat viestin:

     x is 10

  6. Kun valitset OK,näyttöön tulee seuraava sanoma:

    x, as seen by Macro2 is

  7. Valitse OK.

  8. Makro2 ei näytä muuttujan x arvoa, koska muuttuja x on paikallinen arvoksi Macro1. Näyttöön tulee seuraava sanoma:

    x is still 10

  9. Valitse OK.

  10. 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:

  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. Suorita Makro1.

  3. Saat viestin:

    the initialized value of x is 0

  4. Valitse OK,niin saat viestin:

    x is 10

  5. Valitse OK.

  6. Kun suoritat Macro1:n, näyttöön tulee seuraava

    the initialized value of x is 10

  7. Kun valitset OK,näyttöön tulee seuraava sanoma:

    x is 20

  8. 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:

  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. Kun suoritat Macro1:n, näyttöön tulee seuraava sanoma:

    the initialized value of x is 0

  3. Kun valitset OK, näyttöön tulee seuraava viesti:

    x is 10

  4. Valitse OK.

  5. Kun suoritat Makro1:n, näyttöön tulee seuraava

    the initialized value of x is 10

  6. Valitse OK.

  7. Näyttöön tulee seuraava viesti:

    x is 20

  8. 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

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.

Osallistumalla yhteisöihin voit kysyä kysymyksiä ja vastata niihin, antaa palautetta sekä kuulla lisää asiantuntijoilta, joilla on runsaasti tietoa.

Oliko näistä tiedoista hyötyä?

Kuinka tyytyväinen olet käännöksen laatuun?
Mikä vaikutti kokemukseesi?
Kun valitset Lähetä, palautettasi käytetään Microsoftin tuotteiden ja palveluiden parantamiseen. IT-järjestelmänvalvojasi voi kerätä nämä tiedot. Tietosuojatiedot.

Kiitos palautteesta!

×