Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

Sissejuhatus

Selles artiklis kirjeldatakse, kuidas kasutada muutujaid Microsoft Excel microsoft Visual Basic for Applications alamprotseduurides.

Lisateave

Muutujad alamprotseduuris

Programmeerimiskeelte võimas funktsioon on võimalus salvestada midagi muutujasse, et muutuja sisu saaks kasutada või hiljem muuta. Selles dokumendis käsitletakse muutujate järgmist kasutamist Visual Basic.

  • Muutujate deklareerimine.

  • Toimingud ja projektid, mis saavad muutujat kasutada.

  • Muutuja eluiga.

Muutuja deklareerimine makros

Lihtsaim viis makros muutuja deklareerimiseks on kasutada lauset Dim. Järgmine rida deklareerib kaks muutujat täisarvuna.

    Dim x As Integer, y As Integer

Kui x ja y on määratud täisarvuks, peate Visual Basic-le eraldama täisarvu muutuja jaoks piisavalt mälu (2 baiti iga x-i ja y-ga) ja et x- või y-failis talletatav teave on täisarv vahemikus -32768 kuni 32767.

MÄRKUS. Kui deklareerite ühe dim-lause abil mitu muutujat, peate määrama iga muutuja andmetüübi.

Kui te ei määra iga muutuja andmetüüpi, nagu järgmises Visual Basic, on täisarvu muutujana häälestatud ainult muutuja y. Muutuja x on variandi tüüp:

    Dim x, y As Integer

Lisateavet leiate allpool teemast Andmetüüp Variant.
 

Muutujatesti miseks tehke järgmist.

  1. Salvestage ja sulgege kõik avatud töövihikud ning seejärel avage uus töövihik.

  2. Käivitage Visual Basic (vajutage klahvikombinatsiooni ALT+F11).

  3. Klõpsake menüüs Lisa nuppu Moodul.

  4. Tippige järgmine kood:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "the value of x is " & x & _
        Chr(13) & "y väärtus on " & y
    End Sub

  5. Käivitage Variable_Test makro. Kuvatakse järgmine teade:

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

  6. Klõpsake nuppu OK.

  7. Makro Variable_Test muuta järgmist rida:

    x = 10

  8. to:

    x = "error"

  9. Käivitage Variable_Test makro.

Teile kuvatakse käitustõrge, kuna "tõrge" pole täisarv ja proovite määrata seda stringiväärtust täisarvu muutujale x.
 

Andmetüübi kokkuvõte

Need on levinumad muutujate andmetüübid.

levinumad muutuvad andmetüübid

andmetüüp Variant

Kui te muutuja deklareerimisel andmetüüpi ei määra või muutujat üldse ei deklareeri, määrab Visual Basic muutuja andmetüübi automaatselt. Järgmised on selle andmetüübina deklareeritud muutujate eelised.

  • Muutujad võivad sisaldada stringi, kuupäeva, kellaaega, loogikaväärtusi või arvväärtusi.

  • Muutujad saavad automaatselt sisaldavad väärtused teisendada.

Puuduseks on see, et variandimuutujad nõuavad vähemalt 16 baiti mälu. 16 baiti mälu võib olla oluline suurtes protseduurides või keerukates moodulites.

Makros selle Variable_Test tehke järgmist.

Muutke makros Variable_Test koodiks:

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

Käivitage Variable_Test makro.

Teile ei saa viga, kuna variantmuutujale x ja y saate midagi määrata.

MÄRKUS. Samuti võite jätta välja järgmise rea ja makro töötab endiselt, kuna muutujaid x ja y käsitletakse andmetüüpidena Variant.

    Dim x, y

Muutuja ulatus

Muutuja deklareerimisel võivad või ei pruugi seda näha ka teised sama mooduli, muude moodulite või muude projektide makrod. Muutuja kättesaadavust moodulites nimetatakse ulatuseks. Kolme tüüpi ulatus on protseduuritase, privaatne moodulitase ja avalik moodulitase. Ulatus sõltub sellest, kuidas ja kus muutujaid või muutujaid deklareerite.

Protseduuritaseme ulatus

Protseduuritaseme ulatusega muutujat ei vaadelda väljaspool protseduuri, kus see deklareeritakse. Kui määrate protseduuritaseme ulatusega muutuja väärtuse, siis teised makrod selle muutuja sisu ei vaata.

Veendumaks, et protseduuritaseme ulatusega muutujat ei ole näha väljaspool protseduuri, kus see deklareeritakse, tehke järgmist.

  1. Lisage oma projekti uus moodul.

  2. Tippige sellesse moodulisse mõlemad järgmised makrod.
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, nagu macro1 on " & x 'the next line runs Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, nagu on näha Macro2 on " & x End Sub

  3. Käivitage makro1 ja kuvatakse järgmine teade:

    x, as seen by Macro1 is 10

  4. Klõpsake nuppu OKja kuvatakse järgmine teade:

    x, as seen by Macro2 is

  5. Klõpsake nuppu OK.

Makro2 ei kuva muutuja x väärtust, kuna muutuja x on makro1 kohalik.

Privaatne ja avalik moodulitaseme ulatus

Muutujaid saate määratleda mooduli deklaratsioonide jaotises (mooduli ülaosas, eelkõige alamprotseduurides) ja määrata muutuja ulatuse avaliku lause, lause Dim või Eraväljavõtte abil. Kui panete avaliku lause muutuja ette, on muutuja saadaval kõigi projekti moodulite makrode jaoks. Kui lisate muutuja ette kas lause Dim või Era, on muutuja saadaval ainult mooduli makrodele, kus see deklareeritakse.

Avaliku avalduse ja dim-lause erinevuse miseks tehke järgmist.

  1. Salvestage ja sulgege kõik avatud töövihikud ning avage uus töövihik.

  2. Käivitage Visual Basic redaktor.

  3. Lisage oma projekti moodul.

  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. Lisage oma projekti veel üks moodul.

  6. Tippige sellesse moodulisse järgmine kood:


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

  7. Käivitage Macro_1a makro esimeses moodulis.

  8. Kui muutuja x on deklareeritud kui "Avalik x Täisarv", on kõigil projekti kolmel makrol juurdepääs väärtusele x. Esimesel teateväljal kuvatakse väärtus 10. Teisel sõnumiväljal kuvatakse väärtus 20 (kuna x on korrutatud arvuga 2 Macro_1b). Kolmandas teateboksis kuvatakse väärtus 60 (kuna x-i väärtus muudeti väärtuseks 20 Macro_1b ja seejärel korrutati see lahtris Macro2 arvuga 3).

  9. Esimese mooduli deklaratsioonirea muutmine:

       Public x As Integer

    to:

       Dim x As Integer

  10. Käivitage Macro_1a makro.

  11. Kui muutuja x on deklareeritud kui "Dim x As Integer", pääsevad juurde ainult esimese mooduli makrod väärtusele x. Seega kuvab esimene teateboks väärtuse 10, teises sõnumiväljas väärtus 20 (kuna x on korrutatud arvuga 2 Macro_1b) ja kolmandas teateboksis kuvatakse väärtus 0 (kuna makro2 ei näe x-i väärtust ja nulli lähtestamata väärtust kasutab makro 2).

  12. Esimese mooduli deklaratsioonirea muutmine:

      Dim x As Integer

    kuni:

        Private x As Integer

  13. Käivitage Macro_1a makro.

  14. Samad sõnumiväljad kuvatakse lause "Eravälja" abil, nagu need kasutasid lauset Dim. Muutujal x on sama ulatus, mis on privaatne moodulile, kus see deklareeritakse.


MÄRKUS. Kui soovite, et muutuja ulatus piirduks mooduliga, kus see deklareeritakse, kasutage lause Dim asemel privatestatementi. Mõlemad saavutavad sama efekti, kuid ulatus on koodi lugemisel selgem, kui kasutate lauset Era.
 

Muutuja kasutusiga

Aeg, mille jooksul muutuja väärtuse säilitab, nimetatakse selle elueaks. Muutuja väärtus võib eluea jooksul muutuda, kuid see säilitab väärtuse. Kui muutuja kaotab ulatuse, pole sellel enam väärtust.
 

Muutuja väärtuse lähtestamine

Makro käivitamisel lähtestatakse kõik muutujad väärtuseks. Arvuline muutuja lähtestatakse nulliks, muutuvpikkusega string lähtestatakse nullpikkusega stringiks ("") ja fikseeritud pikkusega string täidetakse ASCII koodiga 0. Variandimuutujad lähtestatakse väärtuseks Tühi. Tühi muutuja on arvulises kontekstis null ja stringi kontekstis nullpikkusega string ("").

Protseduuritaseme muutujad

Kui teil on muutuja, mis on makros deklareeritud lause Dim abil, säilitab muutuja selle väärtuse seni, kuni makro töötab. Kui see makro nõuab muid makrosid, säilitatakse muutuja väärtus (pole teistele makrodele saadaval), kui need makrod töötavad ka.

Protseduuritaseme muutujate töö demonstreerimiseks tehke järgmist.

  1. Lisage oma projekti uus moodul.

  2. Tippige sellesse moodulisse mõlemad järgmised makrod:

    Sub Macro1()
        'set x as a procedure level variable
       X-i täisarvuna nihkemine
       MsgBox "the initialized value of x is " & x
       x = 10
        MsgBox "x is " & x
        'the next line runs Macro2
        Makro2
        MsgBox "x is still " & x
    End Sub (Lõpeta alam)
    Alammakro2()
        MsgBox "x, nagu makro2 nägi, on " & x
    End Sub

  3. Käivitage makro1.

  4. Kuvatakse järgmine teade:

        the initialized value of x is 0

  5. Klõpsake nuppu OKja kuvatakse teade:

     x is 10

  6. Klõpsake nuppu OKja kuvatakse järgmine teade:

    x, as seen by Macro2 is

  7. Klõpsake nuppu OK.

  8. Makro2 ei kuva muutuja x väärtust, kuna muutuja x on makro1 kohalik. Kuvatakse järgmine teade:

    x is still 10

  9. Klõpsake nuppu OK.

  10. Käivita makro1.

Teile kuvatakse samad sõnumid, mida on kirjeldatud juhistes 3–6, kuna kohe, kui 6. juhises makro1 lõpetas töötamise, läks muutuja x väärtus kaotsi. Seega, kui käivitate 7. juhises makro1 uuesti, kuvatakse esimeses sõnumis väärtus x nullina (lähtestatud väärtus).

Staatiline märksõna

Kui protseduuritaseme muutuja deklareeritakse staatilise märksõna abil, säilitab muutuja selle väärtuse, kuni projekt lähtestatakse. Seega, kui teil on staatiline muutuja, lähtestatakse järgmine kord, kui helistate oma protseduurile, staatiline muutuja viimasele väärtusele.

Staatilise märksõna töö kohta leiate teavet järgmiselt.

  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. Käivitage makro1.

  3. Kuvatakse teade:

    the initialized value of x is 0

  4. Klõpsake nuppu OKja kuvatakse teade:

    x is 10

  5. Klõpsake nuppu OK.

  6. Käivitage makro1 ja kuvatakse järgmine teade:

    the initialized value of x is 10

  7. Klõpsake nuppu OKja kuvatakse järgmine teade:

    x is 20

  8. Klõpsake nuppu OK.

Sõnumites kuvatavad väärtused on teist korda erinevad, kuna muutuja x deklareeritakse staatilise muutujana ja muutuja säilitab selle väärtuse pärast makro1 esmast käivitamist.

MÄRKUS.  Kui teil on moodulitaseme muutuja, on selle eluiga sama mis staatilise protseduuritaseme muutuja korral.

Moodulitaseme muutuja eluea kontrollimiseks tehke järgmist.

  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. Käivitage makro1 ja kuvatakse järgmine teade:

    the initialized value of x is 0

  3. Klõpsake nuppu OK ja kuvatakse järgmine teade:

    x is 10

  4. Klõpsake nuppu OK,

  5. Käivitage makro1 ja teile kuvatakse järgmine teade:

    the initialized value of x is 10

  6. Klõpsake nuppu OK.

  7. Kuvatakse järgmine teade:

    x is 20

  8. Klõpsake nuppu OK.

Sõnumites kuvatavad väärtused on teist korda erinevad, kuna muutuja x deklareeritakse staatilise muutujana ja see säilitab väärtuse pärast makro1 esmast käivitamist.
 

Projekti lähtestamine muutujate lähtestamiseks

Kui soovite lähtestada staatilise muutuja või moodulitaseme muutuja väärtuse, klõpsake nuppu Lähtesta
Standardne tööriistariba või klõpsake menüüs Käivita nuppu Lähtesta.

Kui teete seda makro1 projektis ja käivitate makro 1uuesti, lähtestatakse muutuja x väärtus tagasi nulli ja kuvatakse esimene teade:

    the initialized value of x is 0

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×