VBA ByVal - Jak používat argument funkce ByVal? (Příklady)

Argument funkce Excel VBA ByVal

ByVal je prohlášení ve VBA. ByVal znamená By Value, tj. Když je podproces vyvolaný z procedury, hodnota proměnných se resetuje na novou hodnotu z nové procedury, která se volá.

Ve VBA, když pracujeme s funkcemi, které jsou volány v různých funkcích, existují určité okolnosti, že se hodnota původního argumentu změní, když se funkce volá; příkaz byval zakazuje, aby procedura nebo kód změnily hodnotu argumentu.

Vím, že to není snadné pochopit čtením vysvětlení, ale s praktickými příklady funkcí můžeme ve skutečnosti lépe porozumět.

Jak používat argument ByVal ve VBA?

Příklad č. 1

Podívejte se například na níže uvedené kódy VBA.

Kód:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Makro2 (ByVal k As Integer) k = k + 5 End Sub

Ve výše uvedených dvou makro procedurách máme společnou proměnnou „k“ napříč procedurami. Než uvidíme výsledek, dovolte mi to podrobně vysvětlit.

V prvním makru jsme proměnné „k“ přiřadili hodnotu 50.

Dim k As Integer k = 50

Dále jsme nazvali druhý postup makra z prvního makra.

Makro2 k

V Macro2 jsme resetovali hodnotu proměnné na k = k + 5. V tomto makru jsme použili argument ByVal k přiřazení hodnoty proměnné „k“.

Abychom pochopili „ByVal“, spustíme kód VBA řádek po řádku stisknutím klávesy F8.

# 1 - Při prvním stisknutí klávesy F8 se zvýrazní první řádek Macro1.

V tomto okamžiku umístěte kurzor na proměnnou „k“ a měla by ukazovat hodnotu proměnné „k“.

V tuto chvíli je hodnota „k“ nulová.

# 2 - Stiskněte ještě jednou klávesu F8 a přeskočí na třetí řádek.

I nyní je hodnota „k“ stále nulová.

# 3 - Nyní stiskněte klávesu F8 a podívejte se na hodnotu k.

Protože hodnota „k“ je nastavena na 50 a je spuštěn kód, hodnota se zobrazuje jako 50.

# 4 - Nyní je zvýrazněný řádek „Macro2 k“, tj. Stisknutím klávesy F8 přejdete na druhý postup, Macro2.

# 5 - I nyní se hodnota proměnné „k“ v tomto postupu zobrazuje také jako 50. Ale uvnitř tohoto makra resetujeme hodnotu proměnné „k“ jako k = k + 5, tj. 55. Nyní stiskněte Klávesa F8 ještě dvakrát.

Jak vidíte výše, hodnota „k“ je nyní 55.

# 6 - Stiskněte klávesu F8 a přeskočí zpět na proceduru Macro1.

Když makro přeskočilo zpět na původní proceduru Macro1, naše proměnná „k“ již není 55, ale původní hodnota v tomto postupu, tj. 50.

Když stisknete klávesu F8, uvidíme v okně zpráv ve VBA pouze 50.

Jak jsme již řekli na začátku článku, argument „ByVal“ nepřenáší hodnoty z jedné procedury do druhé, přestože v okamžiku, kdy narazí na řádek, přenáší hodnotu proměnné z prvního makra na druhé “ ByVal “, když se vrátí k původnímu makru, resetuje hodnotu na původní hodnotu pouze v proceduře.

Příklad č. 2

Nyní se podívejte na níže uvedená dvě makra.

Kód:

Sub P1 () Dim k As Integer: k = 10 Call P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Je to podobné jako v prvním příkladu. V makru „P1“ jsme proměnné „k“ přiřadili hodnotu 10 a ve stejném makru „P1“ jsme nazvali druhé makro „P2“ s proměnnou „k“.
  • Ve druhém makru „P2“ jsme použili argument ByVal a tentokrát je hodnota proměnné „k“ 15.

Toto makro nese hodnotu proměnné „k“ jako deset z makra „P1“ na makro „P2“ a v tomto makru bude hodnota resetována na 15, ale v okamžiku, kdy se vrátí k dokončení makra k prvnímu makru „P1“ hodnota „k“ zpět na 10, ne 15.

Věci k zapamatování

Argument ByVal neovlivňuje hodnotu proměnné ani po spuštění makra, ale pomocí argumentu By Ref můžeme přenášet hodnotu proměnné z jednoho makra do druhého.

Zajímavé články...