Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Úvod

Tento článek popisuje, jak používat proměnné v Microsoft Excel procedur v Microsoft jazyk Visual Basic for Application.

Další informace

Proměnné v dílčí proceduře

Výkonnou funkcí programovacích jazyků je možnost ukládat něco do proměnné, aby bylo možné později v postupu použít nebo změnit obsah proměnné. Tento dokument popisuje následující použití proměnných v Visual Basic:

  • Způsob deklarování proměnných

  • Postupy a projekty, které používejte proměnnou.

  • Životnost proměnné.

Deklarace proměnné v makru

Nejjednodušším způsobem, jak deklarovat proměnnou v makru, je použít příkaz Dim. Následující řádek deklaruje dvě proměnné jako celá čísla:

    Dim x As Integer, y As Integer

Když je argument x a y zadaný jako celá čísla, říkáte Visual Basic, aby vyložil dostatečnou paměť pro celočíselnou proměnnou (2 bajty pro x a y) a že informace uložené v x nebo y jsou celé číslo mezi -32768 a 32767.

POZNÁMKA: Pokud deklarujete více než jednu proměnnou pomocí jednoho příkazu Dim, musíte zadat datový typ pro každou proměnnou.

Pokud nezadáte datový typ pro každou proměnnou, jako v následujícím Visual Basic, nastaví se jako celočíselná proměnná jenom proměnná y. Proměnná x bude typ varianty:

    Dim x, y As Integer

Další informace najdete níže v tématu Datový typ Variant.
 

Pokud chcete provést proměnný test, postupujte takto:

  1. Uložte a zavřete všechny otevřené sešity a otevřete nový sešit.

  2. Spusťte editor Visual Basic (stiskněte ALT+F11).

  3. V nabídce Insert (Vložení) klikněte na Module (Modul).

  4. Zadejte následující 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. Spusťte Variable_Test makro. Zobrazí se následující zpráva:

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

  6. Klikněte na OK.

  7. V Variable_Test změňte následující řádek:

    x = 10

  8. do:

    x = "error"

  9. Spusťte Variable_Test makro.

Zobrazí se chyba při spuštění, protože "chyba" není celé číslo a pokoušíte se přiřadit tuto řetězcovou hodnotu celočíselné proměnné x.
 

Souhrn datového typu

Jedná se o běžné datové typy proměnných:

Běžné datové typy proměnných

Datový typ Variant

Pokud datový typ nezadáte při deklaraci proměnné nebo proměnnou vůbec nedeklarujete, Visual Basic automaticky určuje datový typ varianty pro tuto proměnnou. Výhody proměnných, které jsou deklarovány jako tento datový typ, jsou následující:

  • Proměnné mohou obsahovat řetězec, datum, čas, logickou hodnotu nebo číselné hodnoty.

  • Proměnné mohou automaticky převést hodnoty, které obsahují.

Nevýhodou je, že proměnné variant vyžadují minimálně 16 bajtů paměti. 16 bajtů paměti může být významné ve velkých procedurách nebo ve složitých modulech.

Pokud chcete vidět, jak to funguje v Variable_Test, postupujte takto:

Změňte kód v 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

Spusťte Variable_Test makro.

K chybě se neobdržíte, protože k proměnným variant x a y můžete přiřadit cokoli.

POZNÁMKA: Můžete také nechat následující řádek a makro bude fungovat, protože proměnné x a y budou považovány za datové typy Variant:

    Dim x, y

Obor proměnné

Když deklarujete proměnnou, jinými makremi ve stejném modulu, v jiných modulech nebo v jiných projektech ji jinými makremi ostatních modulů ostatních modulů ostatních deklarují. Tato dostupnost proměnné v modulech se označuje jako obor. Tři typy oboru jsou úroveň procedur, úroveň privátního modulu a veřejná úroveň modulu. Obor závisí na tom, jak a kde deklarujete proměnnou nebo proměnné.

Obor na úrovni procedur

Proměnná s oborem na úrovni procedury není vidět mimo proceduru, ve které je deklarována. Pokud nastavíte hodnotu proměnné, která má obor na úrovni procedury, obsah této proměnné se ostatní makra nezohlední.

Pokud chcete ověřit, že proměnná s oborem na úrovni procedur není vidět mimo proceduru, ve které je deklarována, postupujte takto:

  1. Vložte do projektu nový modul.

  2. Do tohoto modulu zadejte obě následující makra:
      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. Spusťte Makro1 a zobrazí se následující zpráva:

    x, as seen by Macro1 is 10

  4. Klikněte na OKa zobrazí se následující zpráva:

    x, as seen by Macro2 is

  5. Klikněte na OK.

Makro2 nezobrazí hodnotu proměnné x, protože proměnná x je místní pro makro1.

Privátní a veřejný obor na úrovni modulu

Proměnné můžete definovat v části deklarací modulu (v horní části modulu, nad všemi dílčími procedurami) a nastavit obor proměnné pomocí příkazu Public, příkazu Dim nebo příkazu Private. Pokud před proměnnou dáte příkaz Public, bude vaše proměnná dostupná pro všechna makra ve všech modulech v projektu. Pokud před proměnnou zadáte příkaz Dim nebo Private, bude proměnná dostupná jenom pro makra v modulu, ve kterém je deklarována.

Pokud chcete zobrazit rozdíl mezi příkazem Public a příkazem Dim, postupujte takto:

  1. Uložte a zavřete všechny otevřené sešity a otevřete nový sešit.

  2. Spusťte editor Visual Basic.

  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 další modul.

  6. Do tohoto modulu zadejte následující kód:


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

  7. V Macro_1a modulu spusťte makro.

  8. S proměnnou x deklarovanou jako "Public x As Integer" mají všechna tři makra v projektu přístup k hodnotě x. V prvním okně se zprávou se zobrazí hodnota 10. Ve druhém okně se zprávou se zobrazí hodnota 20 (protože hodnota x se vynásobí hodnotou 2 v Macro_1b). Třetí okno se zprávou zobrazuje hodnotu 60 (protože hodnota x byla v aplikaci Macro_1b změněna na 20 a v makru2 byla vynásobena hodnotou 3).

  9. Změňte řádek deklarace v prvním modulu z:

       Public x As Integer

    na:

       Dim x As Integer

  10. Spusťte Macro_1a makro.

  11. S proměnnou x deklarovanou jako "Dim x As Integer" mají k hodnotě x přístup jenom makra v prvním modulu. První okno se zprávou tedy zobrazí hodnotu 10, druhé okno se zprávou zobrazí hodnotu 20 (protože x je vynásobené hodnotou 2 v Macro_1b) a třetí okno se zprávou zobrazí hodnotu 0 (protože makro2 nevidí hodnotu x a neinicializovaná hodnota nula se používá v makru 2).

  12. Změňte řádek deklarace v prvním modulu z:

      Dim x As Integer

    k:

        Private x As Integer

  13. Spusťte Macro_1a makro.

  14. Stejná pole se zprávami se zobrazují pomocí oboru private příkazu jako při použití příkazu Dim. Proměnná x má stejný obor, privátní pro modul, ve kterém je deklarována.


POZNÁMKA: Pokud chcete, aby byl rozsah vaší proměnné omezen na modul, ve kterém je deklarována, použijte příkaz Private místo příkazu Dim. Oba mají stejný efekt, ale při čtení kódu je obor jasnější, pokud použijete příkaz Private.
 

Životnost proměnné

Doba, po kterou si proměnná zachová svoji hodnotu, se označuje jako její životnost. Hodnota proměnné se může během své životnosti změnit, ale zachová hodnotu. Pokud proměnná ztratí obor, už nemá hodnotu.
 

Inicializace hodnoty proměnné

Při spuštění makra se všechny proměnné inicializovaly na hodnotu. Číselná proměnná se inicializuje na nulu, řetězec proměnné délky se inicializuje na řetězec nulové délky ("") a řetězec pevné délky se vyplní kódem ASCII 0. Proměnné variant se inicializovaly na Hodnotu Empty. Proměnná Empty je reprezentována nulou v číselném kontextu a řetězcem nulové délky ("") v řetězcovém kontextu.

Proměnné na úrovni procedur

Pokud máte proměnnou, která je deklarována v makru pomocí příkazu Dim, zachová si proměnná hodnotu, dokud makro běží. Pokud toto makro volá jiná makra, hodnota proměnné zůstane zachována (ale není dostupná pro ostatní makra), pokud jsou spuštěná i tato další makra.

Pokud chcete předvést, jak fungují proměnné na úrovni procedur, postupujte takto:

  1. Vložte do projektu nový modul.

  2. Do tohoto modulu zadejte obě následující makra:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "inicializované hodnoty x je " & x
       x = 10
        MsgBox "x is " & x
        'na dalším řádku se spustí Makro2
        Makro2
        MsgBox "x is still" & x
    End Sub
    Sub Macro2()
        MsgBox "x, as seen by Macro2 is " & x
    End Sub

  3. Spusťte makro1.

  4. Zobrazí se následující zpráva:

        the initialized value of x is 0

  5. Klikněte na OKa zobrazí se zpráva:

     x is 10

  6. Klikněte na OKa zobrazí se následující zpráva:

    x, as seen by Macro2 is

  7. Klikněte na OK.

  8. Makro2 nezobrazí hodnotu proměnné x, protože proměnná x je místní pro makro1. Zobrazí se následující zpráva:

    x is still 10

  9. Klikněte na OK.

  10. Spustit makro1.

Obdržíte stejné zprávy, které jsou popsané v krocích 3 až 6, protože jakmile makro1 přestalo běžet v kroku 6, ztratila se hodnota proměnné x. Proto při opětovném spuštění Makra1 v kroku 7 první zpráva zobrazí hodnotu x jako nulu (inicializované hodnoty).

Statické klíčové slovo

Pokud je proměnná na úrovni procedur deklarována pomocí klíčového slova Static, proměnná si zachová svoji hodnotu, dokud se projekt nevynuluje. Pokud tedy máte statickou proměnnou, při příštím volání procedury se statická proměnná inicializuje na její poslední hodnotu.

Pokud chcete vidět, jak klíčové slovo Static 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. Spusťte makro1.

  3. Zobrazí se zpráva:

    the initialized value of x is 0

  4. Klikněte na OKa zobrazí se zpráva:

    x is 10

  5. Klikněte na OK.

  6. Spusťte Makro1 a zobrazí se následující zpráva:

    the initialized value of x is 10

  7. Klikněte na OKa zobrazí se následující zpráva:

    x is 20

  8. Klikněte na OK.

Hodnoty, které se ve zprávách zobrazují, se podruhé liší, protože proměnná x je deklarována jako statická proměnná a proměnná si zachová svoji hodnotu po prvním spuštění makra Macro1.

POZNÁMKA:  Pokud máte proměnnou na úrovni modulu, její životnost je stejná, jako kdyby to byla statická proměnná na úrovni procedur.

Pokud chcete ověřit životnost proměnné 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. Spusťte Makro1 a zobrazí se následující zpráva:

    the initialized value of x is 0

  3. Klikněte na OK a zobrazí se následující zpráva:

    x is 10

  4. Klikněte na OK,

  5. Spusťte Makro1 a zobrazí se tato zpráva:

    the initialized value of x is 10

  6. Klikněte na OK.

  7. Zobrazí se následující zpráva:

    x is 20

  8. Klikněte na OK.

Hodnoty, které se ve zprávách zobrazují, se podruhé liší, protože proměnná x je deklarována jako statická proměnná a zachová si její hodnotu po prvním spuštění Makra1.
 

Obnovení projektu do továrního nastavení proměnných

Pokud chcete resetovat hodnotu pro statickou proměnnou nebo proměnnou na úrovni modulu, klikněte na tlačítko Obnovit na
Standardní panel nástrojů nebo v nabídce Spustit klikněte na Obnovit.

Pokud to pro projekt Macro1 a potom znovu spusťte Makro1,hodnota proměnné x se inicializuje zpátky na nulu a zobrazí se první zpráva:

    the initialized value of x is 0

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

Děkujeme vám za zpětnou vazbu.

×