Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Úvod

V tomto článku sa popisuje, ako používať premenné v Microsoft Excel pod procedúr v aplikácii Microsoft Visual Basic for Applications.

Ďalšie informácie

Premenné v pod procedúre

Výkonnou funkciou programovacích jazykov je schopnosť niečo uložiť do premennej tak, aby obsah premennej bolo možné použiť alebo zmeniť neskôr v postupe. Tento dokument popisuje nasledujúce používanie premenných v Visual Basic:

  • spôsob deklarovať premenné,

  • Postupy a projekty, ktoré môžu premennú použiť.

  • Životnosť premennej.

Deklarovanie premennej v makre

Najjednoduchším spôsobom deklarovať premennú v makre je použitie príkaza Dim. V nasledujúcom riadku sa deklarujú dve premenné ako celé čísla:

    Dim x As Integer, y As Integer

Ak sú hodnoty x a y zadané ako celé čísla, Visual Basic uchová dostatok pamäte pre celočíselnú premennú (2 bajty pre hodnoty x a y) a že informácie uložené v x alebo y sú celé číslo v rozsahu -32768 až 32767.

POZNÁMKA: Ak deklarovate viac ako jednu premennú pomocou jedného príkazu Dim, musíte špecifikovať typ údajov pre každú premennú.

Ak nezadáte typ údajov pre každú premennú tak, ako je to v nasledujúcom Visual Basic kóde, ako celočíselná premenná je nastavená iba premenná y. Premenná x bude typom variantu:

    Dim x, y As Integer

Ďalšie informácie nájdete v časti Údajový typ Variant nižšie.
 

Ak chcete vykonať test premennej, postupujte takto:

  1. Uložte a zatvorte všetky otvorené zošity a potom otvorte nový zošit.

  2. Spustite editor Visual Basic (stlačte kombináciu klávesov ALT + F11).

  3. V ponuke Vložiť kliknite na položku Modul.

  4. Zadajte nasledujúci kód:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "hodnota x je " & x & _
        Chr(13) & "hodnota y je " & y
    End Sub

  5. Spustite Variable_Test makra. Zobrazí sa toto hlásenie:

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

  6. Kliknite na tlačidlo OK.

  7. V nasledujúcom Variable_Test zmeniť nasledujúci riadok:

    x = 10

  8. na:

    x = "error"

  9. Spustite Variable_Test makra.

Chyba pri spustení sa zobrazí, pretože výraz "chyba" nie je celé číslo a pokúšate sa priradiť túto hodnotu reťazca k celočíselnej premennej x.
 

Súhrn typu údajov

Toto sú bežné typy údajov premenných:

Common Variable data types

údajový typ Variant

Ak pri deklarovaní premennej nezadáte typ údajov alebo ak deklarovate premennú vôbec, Visual Basic automaticky určí údajový typ variantu pre túto premennú. Nižšie sú uvedené výhody premenných deklarovaných ako tento typ údajov:

  • Premenné môžu obsahovať reťazce, dátum, čas, booleovské alebo číselné hodnoty.

  • Premenné môžu automaticky konvertovať hodnoty, ktoré obsahujú.

Nevýhodou je, že premenné typu Variant vyžadujú minimálne 16 bajtov pamäte. 16 bajtov pamäte môže byť vo veľkých postupoch alebo v zložitých moduloch významné.

Ak chcete zistiť, ako to funguje v Variable_Test makra, postupujte takto:

Zmeňte kód v makre Variable_Test na:

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

Spustite Variable_Test makra.

Chyba sa zobrazí, pretože premenným variantu x a y môžete priradiť čokoľvek.

POZNÁMKA: Môžete tiež vynechať nasledujúci riadok a makro bude fungovať aj naďalej, keď sa premenné x a y budú považovať za typy údajov Variant:

    Dim x, y

Rozsah premennej

Keď deklarujete premennú, môže, ale nemusia sa zobraziť inými makrami v rovnakom module, v iných moduloch alebo v iných projektoch. Táto dostupnosť premennej v moduloch sa označuje ako rozsah. Tri typy rozsahu sú na úrovni procedúr, na úrovni súkromného modulu a na úrovni verejného modulu. Rozsah závisí od toho, ako a kde deklarujte premenné alebo premenné.

Rozsah na úrovni procedúr

Premenná s rozsahom na úrovni postupu sa nebude nachádzať mimo postupu, v ktorom je deklarovaná. Ak nastavíte hodnotu premennej, ktorá má rozsah na úrovni postupu, obsah tejto premennej sa ostatným makrám nebude zobraziť.

Ak chcete overiť, či sa premenná s rozsahom na úrovni postupu nezachová mimo procedúry v deklarovanej procedúre, postupujte takto:

  1. Vložte do projektu nový modul.

  2. Do tohto modulu zadajte obe nasledujúce makrá:
      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. Spustite makro1 a zobrazí sa toto hlásenie:

    x, as seen by Macro1 is 10

  4. Kliknite na tlačidlo OKa zobrazí sa nasledujúce hlásenie:

    x, as seen by Macro2 is

  5. Kliknite na tlačidlo OK.

Makro2 nezobrazí hodnotu premennej x, pretože premenná x je lokálna pre makro1.

Rozsah na úrovni súkromného a verejného modulu

Premenné môžete definovať v sekcii deklarácií modulu (v hornej časti modulu nad všetkými pod procedúrami) a nastaviť rozsah premennej pomocou verejného príkazu, príkazu Dim alebo príkazu Private. Ak umiestnite príkaz Public pred premennú, premenná bude k dispozícii pre všetky makrá vo všetkých moduloch v projekte. Ak umiestnite príkaz Dim alebo súkromný príkaz pred premennú, vaša premenná je dostupná iba pre makrá v module, v ktorom je deklarovaná.

Ak chcete zobraziť rozdiel medzi príkazom Verejné a príkazom Dim, postupujte takto:

  1. Uložte a zatvorte všetky otvorené zošity a potom otvorte nový zošit.

  2. Spustite Visual Basic Editor.

  3. Vložte modul do projektu.

  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. Vložte do projektu ďalší modul.

  6. Do tohto modulu zadajte nasledujúci kód:


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

  7. Spustite Macro_1a makra v prvom module.

  8. Ak je premenná x deklarovaná ako "Public x As Integer", všetky tri makrá v projekte majú prístup k hodnote x. V prvom okne s hlásením sa zobrazí hodnota 10. V druhom okne s hlásením sa zobrazí hodnota 20 (pretože hodnota x sa vynásobí hodnotou 2 v Macro_1b). V treťom okne s hlásením sa zobrazí hodnota 60 (pretože hodnota x bola v časti Macro_1b zmenená na 20 a potom bola v makre vynásobená číslom 3).

  9. Zmeňte riadok deklarácie v prvom module z:

       Public x As Integer

    na:

       Dim x As Integer

  10. Spustite Macro_1a makra.

  11. Ak je premenná x deklarovaná ako Dim x As Integer, majú prístup k hodnote x iba makrá v prvom module. Takže prvé okno s hlásením zobrazí hodnotu 10, v druhom okne hlásenia sa zobrazí hodnota 20, (pretože v poli s hlásením Macro_1b x sa vynásobí číslom 2) a v treťom okne s hlásením sa zobrazí hodnota 0 (pretože Makro2 nevedie hodnotu x a makro 2 používa neinicializovanú hodnotu nula).

  12. Zmeňte riadok deklarácie v prvom module z:

      Dim x As Integer

    ak chcete:

        Private x As Integer

  13. Spustite Macro_1a makra.

  14. Rovnaké polia správ sa zobrazujú pomocou rozsahu súkromného výpisu ako pri použití príkazu Dim. Premenná x má rovnaký rozsah, súkromný pre modul, v ktorom je deklarovaná.


POZNÁMKA: Ak chcete, aby bol rozsah premennej obmedzený na modul, v ktorom je deklarovaný, namiesto prehlásenia Dim použite príkaz Privatestatement. Oba majú rovnaký účinok, ale pri čítaní kódu pri použití súkromného vyhlásenia je rozsah jasnejší.
 

Čas platnosti premennej

Čas, počas ktorého si premenná zachováva svoju hodnotu, sa nazýva jeho životnosť. Hodnota premennej sa môže zmeniť počas svojej platnosti, ale zachová hodnotu. Ak premenná stratí rozsah, už nemá hodnotu.
 

Inicializácia hodnoty premennej

Po spustení makra sa všetky premenné inicializujú na hodnotu. Číselná premenná sa inicializuje na nulu, reťazec s variabilnou dĺžkou sa inicializuje na reťazec s nulovou dĺžkou ("") a reťazec s pevnou dĺžkou je vyplnený kódom ASCII 0. Premenné typu Variant sú inicializované na prázdne. Prázdna premenná je v číselnom kontexte zastúpená nulou a reťazec s nulovou dĺžkou ("") v kontexte reťazca.

Premenné na úrovni postupu

Ak máte premennú deklarovanú v makre pomocou príkazu Dim, premenná si zachová svoju hodnotu, kým je makro spustené. Ak toto makro vyvolá iné makrá, hodnota premennej sa zachová (nie je však k dispozícii pre ďalšie makrá), pokiaľ sú spustené aj tieto ďalšie makrá.

Ak chcete ukázať, ako fungujú premenné na úrovni procedúr, postupujte takto:

  1. Vložte do projektu nový modul.

  2. Do tohto modulu zadajte obe nasledujúce makrá:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox Inicializovaná hodnota x je " & x
       x = 10
        MsgBox "x je " & x
        Ďalší riadok spúšťa Makro2
        Makro2
        MsgBox "x je stále " & x
    End Sub
    Sub Macro2()
        MsgBox "x, ako vidia Macro2 je " & x
    End Sub

  3. Spustite makro1.

  4. Zobrazí sa toto hlásenie:

        the initialized value of x is 0

  5. Kliknite na tlačidlo OKa zobrazí sa hlásenie:

     x is 10

  6. Kliknite na tlačidlo OKa zobrazí sa nasledujúce hlásenie:

    x, as seen by Macro2 is

  7. Kliknite na tlačidlo OK.

  8. Makro2 nezobrazí hodnotu premennej x, pretože premenná x je lokálna pre makro1. Zobrazí sa toto hlásenie:

    x is still 10

  9. Kliknite na tlačidlo OK.

  10. Spustenie makra1.

Prijímate rovnaké hlásenia, aké sú popísané v krokoch 3 až 6, pretože po zastavení spustenia makra1 v kroku 6 sa hodnota premennej x stratila. Ak teda znova otvoríte Makro1 v kroku 7, v prvej správe sa zobrazí hodnota x ako nula (inicializovaná hodnota).

Statické kľúčové slovo

Ak je premenná na úrovni postupu deklarovaná pomocou statického kľúčového slova, premenná si zachová hodnotu, až kým sa projekt nevynuluje. Ak teda máte statickú premennú, pri ďalšom vol volovaní procedúry sa statická premenná inicializuje na jej poslednú hodnotu.

Ak chcete zistiť, ako statické kľúčové slovo funguje, postupujte takto:

  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. Spustite makro1.

  3. Zobrazí sa toto hlásenie:

    the initialized value of x is 0

  4. Kliknite na tlačidlo OKa zobrazí sa hlásenie:

    x is 10

  5. Kliknite na tlačidlo OK.

  6. Spustite makro1 a zobrazí sa toto hlásenie:

    the initialized value of x is 10

  7. Kliknite na tlačidlo OKa zobrazí sa nasledujúce hlásenie:

    x is 20

  8. Kliknite na tlačidlo OK.

Hodnoty, ktoré sa zobrazujú v správach, sú odlišné druhýkrát, pretože premenná x je deklarovaná ako statická premenná a jej hodnota sa zachová po prvom spustení makra1.

POZNÁMKA:  Ak máte premennú na úrovni modulu, jeho životnosť je rovnaká ako v prípade statickej premennej na úrovni procedúr.

Ak chcete overiť čas platnosti premennej na úrovni modulu, postupujte takto:

  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. Spustite makro1 a zobrazí sa toto hlásenie:

    the initialized value of x is 0

  3. Kliknite na tlačidlo OK a zobrazí sa nasledujúce hlásenie:

    x is 10

  4. Kliknite na tlačidlo OK.

  5. Spustite makro1 a zobrazí sa toto hlásenie:

    the initialized value of x is 10

  6. Kliknite na tlačidlo OK.

  7. Zobrazí sa toto hlásenie:

    x is 20

  8. Kliknite na tlačidlo OK.

Hodnoty, ktoré sa zobrazujú v správach, sú po druhom čase odlišné, pretože premenná x je deklarovaná ako statická premenná a zachováva jej hodnotu po prvom spustení makra1.
 

Vynulovanie premenných v projekte

Ak chcete obnoviť hodnotu statickej premennej alebo premennej úrovne modulu, kliknite na tlačidlo Resetovať na
Štandardný panel s nástrojmi alebo kliknite na položku Obnoviť v ponuke Spustiť.

Ak to urobiť pre projekt Macro1 a potom znova spustite Makro1,hodnota premennej x sa inicializuje späť na nulu a zobrazí sa prvé hlásenie:

    the initialized value of x is 0

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×