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.