Muutujate kasutamine Exceli alamtoimingutes programmis Visual Basic for Applications

Sissejuhatus

Selles artiklis kirjeldatakse, kuidas kasutada muutujaid Microsoft Visual Basic for Applicationsi Microsoft Exceli alamtoimingutes.

Veel teavet

Muutujad alamprotseduuris

Programmeerimiskeelte võimas omadus on võime talletada midagi muutujas nii, et muutuja sisu saab kasutada või muuta hiljem protseduuri käigus. Selles dokumendis käsitletakse muutujate järgmist kasutamist Visual Basicus.

  • Muutujate deklareerimine.
  • Toimingud ja projektid, mis saavad muutujat kasutada.
  • Muutuja eluiga.

Makro muutuja deklareerimine

Lihtsaim viis makro muutuja deklareerimiseks on kasutada lauset Dim. Järgmine rida deklareerib kaks muutujat täisarvudena:

    Dim x As Integer, y As Integer

Kui x ja y on määratud täisarvudena, palute Visual Basicul eemaldada täisarvulise muutuja jaoks piisavalt mälu (2 baiti iga x ja y kohta) ja et kas x- või y-sse salvestatud 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 Basicu koodis, häälestatakse täisarvulise muutujana ainult muutuja y. Muutuja x on variandi tüüp:

    Dim x, y As Integer

Lisateavet leiate allpool jaotisest Andmetüüp Variant .
 

Muutujatesti tegemiseks tehke järgmist.

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

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

  3. Klõpsake menüü Lisa käsku Moodul.

  4. Tippige järgmine kood:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "väärtus x on " & x & _
        Chr(13) & "väärtus y 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. Muutke Variable_Test makros järgmist rida:

    x = 10

  8. järgmiselt.

    x = "error"

  9. Käivitage Variable_Test makro.

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

Andmetüübi kokkuvõte

Need on levinumad muutuvad andmetüübid.

levinumad muutuvad andmetüübid

andmetüüp Variant

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

  • Muutujad võivad sisaldada stringi-, kuupäeva-, kellaaja-, kahend- või arvväärtusi.
  • Muutujad saavad teisendada väärtusi, mida need sisaldavad automaatselt.

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.

Kui soovite teada, kuidas see makros Variable_Test toimib, tehke järgmist.

Muutke Variable_Test makro 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 kuvata tõrget, kuna saate määrata kõik variandimuutujatele x ja y.

MÄRKUS. Võite ka jätta välja järgmise rea ja makro toimib edasi, kuna muutujaid x ja y käsitletakse andmetüüpidena Variant:

    Dim x, y

Muutuja ulatus

Muutuja deklareerimisel võivad või ei pruugi teised sama mooduli, muude moodulite või muude projektide makrod seda näha. Muutuja kättesaadavust moodulites nimetatakse ulatuseks. Kolm ulatusetüüpi on protseduuritase, eramooduli tase ja avaliku mooduli tase. Ulatus sõltub sellest, kuidas ja kus te muutujaid või muutujaid deklareerite.

Protseduuritaseme ulatus

Protseduuritaseme ulatusega muutujat ei kuvata väljaspool protseduuri, kus see on deklareeritud. Kui määrate protseduuritaseme ulatusega muutuja väärtuse, ei näe teised makrod selle muutuja sisu.

Veendumaks, et toimingutasemel ulatusega muutujat ei kuvata väljaspool protseduuri, kus see on deklareeritud, tehke järgmist.

  1. Saate projekti lisada uue mooduli.

  2. Tippige sellesse moodulisse mõlemad järgmised makrod:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, nagu makro1 näeb on " & x 'järgmine rida käivitab Macro2 Macro2 End Sub Macro2() MsgBox "x, nagu makro2 näeb on " & x End Sub

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

    x, as seen by Macro1 is 10

  4. Klõpsake nuppu OK ja 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 lokaalne.

Privaatse ja avaliku moodulitaseme ulatus

Muutujad saate määratleda mooduli deklaratsioonide jaotises (mooduli ülaosas, ennekõike alamprotseduurid) ja määrata muutuja ulatuse, kasutades lauset Avalik, Dim või Eralause. Kui paigutate avaliku lause muutuja ette, on muutuja saadaval kõigi projekti moodulite makrode jaoks. Kui sisestate muutuja ette lause Dim või Private, on muutuja saadaval ainult mooduli makrodele, kus see deklareeritakse.

Avaliku avalduse ja dim-lause erinevuste nägemiseks tehke järgmist.

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

  2. Käivitage Visual Basic Editor.

  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. Saate projekti lisada mõne muu mooduli.

  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 "Public x As Integer", on kõigil projekti kolmel makrol juurdepääs väärtusele x. Esimesel teateboksil kuvatakse väärtus 10. Teisel teateboksil kuvatakse väärtus 20 (kuna x korrutatakse Macro_1b arvuga 2). Kolmandas teateboksis kuvatakse väärtus 60 (kuna x-i väärtus muudeti Macro_1b väärtuseks 20 ja siis korrutati see argumendis Macro2 väärtusega 3).

  9. Muutke esimeses moodulis deklareerimisrida järgmiseks:

       Public x As Integer

    järgmiselt.

       Dim x As Integer

  10. Käivitage Macro_1a makro.

  11. Kui muutuja x on deklareeritud kui "Dim x Täisarvuna", on ainult esimese mooduli makrodel juurdepääs väärtusele x. Seega kuvatakse esimeses teateboksis väärtus 10, teises teateboksis väärtus 20 (kuna x korrutatakse Macro_1b arvuga 2) ja kolmandas teateboksis kuvatakse väärtus 0 (kuna makro2 ei näe väärtust x ja makro 2 kasutab lähtestamata nullväärtust).

  12. Muutke esimeses moodulis deklareerimisrida järgmiseks:

      Dim x As Integer

    järgmiselt.

        Private x As Integer

  13. Käivitage Macro_1a makro.

  14. Samu teatevälju kuvatakse eralause ulatuse abil nagu dim-lauset kasutades. Muutujal x on sama ulatus, mis on privaatselt seotud mooduliga, kus see on deklareeritud.

MÄRKUS. Kui soovite, et muutuja ulatus piirduks mooduliga, kus see deklareeritakse, kasutage lause Dim asemel lauset Privatestatement. Mõlemad saavutanud sama efekti, kuid ulatus on selgem, kui loete koodi, kui kasutate eralauset.
 

Muutuja eluiga

Aeg, mille jooksul muutuja säilitab oma väärtuse, 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. Arvmuutuja lähtestatakse nulliks, muutuja pikkusega string lähtestatakse nullpikkusega stringiks ("") ja fikseeritud pikkusega string täidetakse ASCII koodiga 0. Variandimuutujad lähtestatakse tühjaks. Tühja muutujat tähistab arvkontekstis null ja stringikontekstis nullpikkusega string ("").

Protseduuritaseme muutujad

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

Protseduuritaseme muutujate toimimise näitamiseks tehke järgmist.

  1. Saate projekti lisada uue mooduli.

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

    Sub Macro1()
        'set x as a procedure level variable
       Hämar x täisarvuna
       MsgBox "x-i lähtestatud väärtus on " & x
       x = 10
        MsgBox "x is " & x
        'järgmine rida käivitab makro2
        Makro2
        MsgBox "x is still " & x
    End Sub
    Alammakro2()
        MsgBox "x, nagu makro2 nägi, on " & x
    End Sub

  3. Käivita makro1.

  4. Kuvatakse järgmine teade:

        the initialized value of x is 0

  5. Klõpsake nuppu OK ja kuvatakse teade:

     x is 10

  6. Klõpsake nuppu OK ja 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 lokaalne. Kuvatakse järgmine teade:

    x is still 10

  9. Klõpsake nuppu OK.

  10. Käivita makro1.

Saate samad teated, mida kirjeldatakse juhistes 3–6, kuna kohe, kui makro1 6. juhises enam ei tööta, läks muutuja x väärtus kaotsi. Seega, kui käivitate 7. juhises makro1 uuesti, kuvatakse esimeses teates väärtus x nullina (lähtestatud väärtus).

Staatiline märksõna

Kui protseduuritaseme muutuja deklareeritakse staatilise märksõna abil, säilitab muutuja oma väärtuse kuni projekti lähtestamiseni. Seega, kui teil on staatiline muutuja, lähtestatakse järgmine kord, kui protseduuri kutsute, staatiline muutuja selle viimaseks väärtuseks.

Selleks et näha, kuidas staatiline märksõna toimib, tehke järgmist.

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

  2. Kuvatakse järgmine teade:

    the initialized value of x is 0

  3. Klõpsake nuppu OK ja kuvatakse teade:

    x is 10

  4. Klõpsake nuppu OK.

  5. Käivita makro1 ja kuvatakse järgmine teade:

    the initialized value of x is 10

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

    x is 20

  7. Klõpsake nuppu OK.

Sõnumites kuvatavad väärtused on teisel korral erinevad, kuna muutuja x deklareeritakse staatilise muutujana ja muutuja säilitab väärtuse pärast makro1 esmakordset käivitamist.

MÄRKUS: Kui teil on moodulitaseme muutuja, on selle eluiga sama, mis staatiline protseduuritaseme muutuja.

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

    the initialized value of x is 0

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

    x is 10

  3. Klõpsake nuppu OK,

  4. Käivita makro1 ja kuvatakse järgmine teade:

    the initialized value of x is 10

  5. Klõpsake nuppu OK.

  6. Kuvatakse järgmine teade:

    x is 20

  7. Klõpsake nuppu OK.

Sõnumites kuvatavad väärtused on teisel korral erinevad, kuna muutuja x deklareeritakse staatilise muutujana ja see säilitab väärtuse pärast makro1 esmakordset 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
Standard tööriistariba või klõpsake menüüs Käivita nuppu Lähtesta.

Kui teete seda projekti Makro1 jaoks ja käivitate seejärel makro1 uuesti, lähtestatakse muutuja x väärtus tagasi nulli ja kuvatakse esimene teade:

    the initialized value of x is 0