Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Įžanga

Šiame straipsnyje aprašoma, kaip naudoti kintamuosius Microsoft Excel "Microsoft Visual Basic for Applications" antrinėse procedūrose.

Daugiau informacijos

Kintamieji antrinėje procedūroje

Galinga programavimo kalbų funkcija yra galimybė ką nors saugoti kintamajame, kad būtų galima naudoti arba vėliau keisti kintamojo turinį. Šiame dokumente aptariamas toliau nurodytas kintamųjų naudojimas Visual Basic:

  • Kaip pateikiami kintamieji.

  • Procedūros ir projektai, kurie gali naudoti kintamąjį.

  • Kintamojo gyvavimo laikas.

Kintamojo deklaras makrokomandoje

Paprasčiausias būdas paskelbti kintamąjį makrokomandoje yra naudoti sakinį Dim. Toliau pateiktoje eilutėje nurodyti du kintamieji, kaip sąsieji skaičiai:

    Dim x As Integer, y As Integer

Kai x ir y nurodyti kaip sveikieji skaičiai, "Visual Basic" nurodote skirti pakankamai atminties sveikojo skaičiaus kintamajam (po 2 baitus x ir y) ir kad informacija, saugoma x arba y, yra sveikasis skaičius nuo -32768 iki 32767.

PASTABA: Jei deklaruosite daugiau nei vieną kintamąjį naudodami vieną dim sakinį, turite nurodyti kiekvieno kintamojo duomenų tipą.

Jei nenustatysite kiekvieno kintamojo duomenų tipo, kaip toliau pateiktame Visual Basic, tik kintamasis y nustatomas kaip skaičiaus kintamasis. Kintamasis x bus varianto tipas:

    Dim x, y As Integer

Daugiau informacijos žr. Varianto duomenų tipas toliau.
 

Norėdami atlikti kintamojo testą, atlikite šiuos veiksmus:

  1. Įrašykite ir uždarykite atidarytas darbaknyges, tada atidarykite naują darbaknygę.

  2. Paleiskite Visual Basic rengyklę (paspauskite ALT + F11).

  3. Meniu Įterpimas spustelėkite Modulis.

  4. Įveskite šį kodą:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "reikšmė x yra" & x & _
        Chr(13) & "reikšmė y yra " & y
    Pabaigos antrinis

  5. Paleiskite Variable_Test makrokomandą. Gaunate šį pranešimą:

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

  6. Spustelėkite Gerai.

  7. Makrokomandos Variable_Test šią eilutę:x = 10

  8. į:

    x = "error"

  9. Paleiskite Variable_Test makrokomandą.

Gausite vykdymo laiko klaidą, nes "klaida" nėra sąskaitinis skaičius ir bandote priskirti šią eilutės reikšmę sąskaitos kintamajam x.
 

Duomenų tipo suvestinė

Tai yra bendrieji kintamųjų duomenų tipai:

bendrieji kintamųjų duomenų tipai

duomenų tipas „Variant“

Jei nenurodote duomenų tipo, kai paskelbiate kintamąjį, arba iš viso nepaskelbsite kintamojo, Visual Basic automatiškai nurodys šio kintamojo varianto duomenų tipą. Toliau nurodyti kintamųjų, kurie yra nurodyti kaip šio duomenų tipo, pranašumai:

  • Kintamuosius gali sudaryti eilutė, data, laikas, Bulio logikos arba skaitinės reikšmės.

  • Kintamieji gali konvertuoti reikšmes, kuriose jie yra automatiškai.

Trūkumas tas, kad varianto kintamiesiems reikia mažiausiai 16 baitų atminties. 16 baitų atminties gali būti reikšmingi didelėse procedūrose arba sudėtinguose moduliuose.

Norėdami pamatyti, kaip tai veikia makrokomandoje Variable_Test, atlikite šiuos veiksmus:

Pakeiskite makrokomandos Variable_Test į:

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

Paleiskite Variable_Test makrokomandą.

Klaidos negausite, nes galite priskirti bet ką varianto kintamiesiems x ir y.

PASTABA: Taip pat galite išeiti iš šios eilutės, o makrokomanda veiks kaip kintamieji x ir y laikomi duomenų tipais Variantas:

    Dim x, y

Kintamojo aprėptis

Kai paskelbiate kintamąjį, jis gali būti matomas arba jo nematė kitos makrokomandos tame pačiame modulyje, kituose moduliuose arba kituose projektuose. Šis modulių kintamojo pasiekiamumas vadinamas aprėptis. Trijų tipų aprėptis yra procedūros lygis, privatus modulio lygis ir viešasis modulio lygis. Aprėptis priklauso nuo to, kaip ir kur paskelbiate kintamąjį arba kintamuosius.

Procedūros lygio aprėptis

Kintamasis su procedūros lygio aprėptimi neįeis į procedūrą, kurioje jis deklaruojamas. Jei nustatote kintamojo, kuriame yra procedūros lygio aprėptis, reikšmę, to kintamojo turinio nematė kitos makrokomandos.

Norėdami patikrinti, ar kintamasis su procedūros lygio aprėptimi nėra matomas už procedūros, kurioje jis deklaruojamas, ribų, atlikite šiuos veiksmus:

  1. Į savo projektą įterpkite naują modulį.

  2. Į šį modulį įveskite abi šias makrokomandas:
      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. Paleiskite makrokomandą1 ir gausite šį pranešimą:

    x, as seen by Macro1 is 10

  4. Spustelėkite Geraiir gausite šį pranešimą:

    x, as seen by Macro2 is

  5. Spustelėkite Gerai.

Makrokomanda2 nerodo kintamojo x reikšmės, nes kintamasis x yra vietinis makrokomandai1.

Privataus ir viešojo modulio lygio aprėptis

Galite apibrėžti kintamuosius modulio deklaracijų sekcijoje (modulio viršuje, virš visų antrinių procedūrų) ir nustatyti kintamojo aprėptį naudodami viešąjį sakinį, Sakinį Dim arba Privatų sakinį. Jei prieš kintamąjį įdėjote viešąjį sakinį, jūsų kintamasis bus pasiekiamas visoms makrokomandoms visuose projekto moduliuose. Jei prieš kintamąjį įdėsite sakinį Neryškus arba Privatus, jūsų kintamasis bus pasiekiamas tik to modulio makrokomandoms, kuriose jis deklaruojamas.

Norėdami pamatyti skirtumą tarp viešo sakinių ir dim sakinių, atlikite šiuos veiksmus:

  1. Įrašykite ir uždarykite visas atidarytas darbaknyges, tada atidarykite naują darbaknygę.

  2. Paleiskite Visual Basic rengyklę.

  3. Įterpkite modulį į savo projektą.

  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. Į projektą įterpkite kitą modulį.

  6. Šiame modulyje įveskite šį kodą:


    Sub Macro2()     x = x * 3
        MsgBox x
    Pabaigos antrinis

  7. Paleiskite Macro_1a makrokomandą pirmajame modulyje.

  8. Kai kintamasis x paskelbiamas kaip "Viešasis x kaip integer", visos trys projekto makrokomandos turi prieigą prie x reikšmės. Pirmasis pranešimo laukas rodo reikšmę 10. Antrajame pranešimo lauke rodoma reikšmė 20 (nes x dauginamas iš 2 Macro_1b). Trečiame pranešimo lauke rodoma reikšmė 60 (nes x reikšmė buvo pakeista į 20 Macro_1b tada ji buvo padauginta iš 3 makrokomandoje Macro2).

  9. Pakeiskite deklaracijos eilutę pirmajame modulyje iš:

       Public x As Integer

    to:

       Dim x As Integer

  10. Paleiskite Macro_1a makrokomandą.

  11. Kai kintamasis x paskelbiamas kaip "Dim x As Integer", tik pirmojo modulio makrokomandos turi prieigą prie x reikšmės. Taigi, pirmajame pranešimo lauke rodoma 10 reikšmė, antrajame pranešimo lauke rodoma 20 reikšmė (x padauginta iš 2 Macro_1b), o trečiame pranešimo lauke rodoma reikšmė 0 (nes Makrokomanda2 nematote x reikšmės, o 2 makrokomanda naudoja neinicijuotą nulinės reikšmės reikšmę).

  12. Pakeiskite deklaracijos eilutę pirmajame modulyje iš:

      Dim x As Integer

    į:

        Private x As Integer

  13. Paleiskite Macro_1a makrokomandą.

  14. Tie patys pranešimų laukai rodomi naudojant privataus sakinį, kaip jie naudoja sakinį Neryškus. Kintamasis x turi tą pačią aprėptį, privatus į modulį, kuriame jis deklaruojamas.


PASTABA: Jei norite, kad kintamojo aprėptis būtų apribota iki modulio, kuriame jis paskelbtas, naudokite sakinį Privatestatement, o ne Dim. Jie abu pasiekia tą patį efektą, bet aprėptis aiškesnė, kai skaitote kodą, jei naudojate sakinį Privatus.
 

Kintamojo gyvavimo laikas

Laikas, per kurį kintamasis išlaiko savo reikšmę, vadinamas jo gyvavimo laikotarpiu. Kintamojo reikšmė gali pasikeisti per visą jo gyvavimo laiką, tačiau ji išsaugos reikšmę. Be to, kai kintamasis praranda aprėptį, jis nebeturi reikšmės.
 

Inicijuoti kintamojo reikšmę

Paleidus makrokomandą, visi kintamieji inicijuojami į reikšmę. Skaitinis kintamasis inicijuojamas iki nulio, kintamojo ilgio eilutė inicijuojama į nulinio ilgio eilutę (""), o fiksuoto ilgio eilutė užpildoma ASCII kodu 0. Varianto kintamieji inicijuojami į Tuščias. Kintamasis Tuščias skaitiniame kontekste yra lygus nuliui, o eilutės kontekste – nulinio ilgio eilutė ("").

Procedūros lygio kintamieji

Jei turite kintamąjį, kuris yra paskelbtas makrokomandoje naudojant sakinį Dim, kintamasis išlaiko reikšmę tol, kol makrokomanda veikia. Jei ši makrokomanda reikalauja kitų makrokomandų, kintamojo reikšmė išlaikoma (tačiau negalima kitoms makrokomandoms), kol taip pat vykdomos kitos makrokomandos.

Norėdami parodyti, kaip veikia procedūros lygio kintamieji, atlikite šiuos veiksmus:

  1. Į savo projektą įterpkite naują modulį.

  2. Į šį modulį įveskite abi šias makrokomandas:

    Sub Macro1()
        "nustatyti x kaip procedūros lygio kintamąjį
       Dim x As Integer
       MsgBox "the initialized value of x is" & x
       x = 10
        MsgBox "x is" & x
        "Paskesoje eilutėje vykdoma makrokomanda2
        Makrokomanda2
        MsgBox "x is still" & x
    Pabaigos antrinis
    Antrinė makrokomanda2()
        MsgBox "x, as seen by Macro2 is" & x
    Pabaigos antrinis

  3. Vykdyti makrokomandą1.

  4. Gaunate šį pranešimą:

        the initialized value of x is 0

  5. Spustelėkite Geraiir gausite pranešimą:

     x is 10

  6. Spustelėkite Geraiir gausite šį pranešimą:

    x, as seen by Macro2 is

  7. Spustelėkite Gerai.

  8. Makrokomanda2 nerodo kintamojo x reikšmės, nes kintamasis x yra vietinis makrokomandai1. Gaunate šį pranešimą:

    x is still 10

  9. Spustelėkite Gerai.

  10. Vykdyti makrokomandą1.

Gaunate tuos pačius pranešimus, aprašytus 3–6 veiksmuose, nes kai tik makrokomanda1 nustojo veikti atlikdami 6 veiksmą, kintamojo x reikšmė buvo prarasta. Todėl atliekant 7 veiksmą pakartotinai paleidus makrokomandą 1, pirmajame pranešime x reikšmė rodoma kaip nulis (inicializuota reikšmė).

Statinis raktažodžis

Jei procedūros lygio kintamasis deklaruojamas naudojant statinį raktažodį, kintamasis išlaiko savo reikšmę, kol projektas bus nustatytas iš naujo. Todėl, jei turite statinį kintamąjį, kitą kartą paskambinus procedūrai, statinis kintamasis inicijuojamas iki paskutinės reikšmės.

Norėdami pamatyti, kaip veikia statinis raktažodžis, atlikite šiuos veiksmus:

  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. Vykdyti makrokomandą1.

  3. Gausite pranešimą:

    the initialized value of x is 0

  4. Spustelėkite Geraiir gausite pranešimą:

    x is 10

  5. Spustelėkite Gerai.

  6. Paleiskite makrokomandą1 ir gaunate šį pranešimą:

    the initialized value of x is 10

  7. Spustelėkite Geraiir gausite šį pranešimą:

    x is 20

  8. Spustelėkite Gerai.

Laiškuose rodomos reikšmės skiriasi antrą kartą, nes kintamasis x deklaruojamas kaip statinis kintamasis, o kintamasis išlaiko reikšmę, kai pirmą kartą paleidžiate Makrokomanda1.

PASTABA:  Jei turite modulio lygio kintamąjį, jo gyvavimo trukmė yra tokia pati, tarsi jis būtų statinis procedūros lygio kintamasis.

Norėdami patikrinti modulio lygio kintamojo trukmę, atlikite šiuos veiksmus:

  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. Paleiskite makrokomandą1 ir gausite šį pranešimą:

    the initialized value of x is 0

  3. Spustelėkite Gerai ir gausite šį pranešimą:

    x is 10

  4. Spustelėkite Gerai,

  5. Paleiskite makrokomandą1 ir gausite šį pranešimą:

    the initialized value of x is 10

  6. Spustelėkite Gerai.

  7. Gaunate šį pranešimą:

    x is 20

  8. Spustelėkite Gerai.

Laiškuose rodomos reikšmės skiriasi antrą kartą, nes kintamasis x deklaruojamas kaip statinis kintamasis ir išsaugo jo reikšmę, kai pirmą kartą paleidžiate makrokomandą 1.
 

Iš naujo nustatyti projektą, kad būtų iš naujo nustatyti kintamieji

Jei norite iš naujo nustatyti statinio kintamojo arba modulio lygio kintamojo reikšmę, spustelėkite mygtuką Nustatyti iš naujo, esantį
Standartinė įrankių juosta arba meniu Vykdyti spustelėkite Nustatyti iš naujo.

Jei tai padarysite makrokomandų1 projektui ir iš naujo paleiskite makrokomandą 1, kintamojo x reikšmė bus inicijuota atgal į nulį ir gausite pirmąjį pranešimą:

    the initialized value of x is 0

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×