VBA ByVal - Ako používať argument funkcie ByVal? (Príklady)

Argument funkcie Excel VBA ByVal

ByVal je vyhlásenie vo VBA. ByVal znamená By Value, tj. Keď sa z procedúry vyvolá podproces, hodnota premenných sa resetuje na novú hodnotu z nového vyvolaného postupu.

Keď vo VBA pracujeme s funkciami, ktoré sa volajú v rôznych funkciách, existujú určité okolnosti, že sa hodnota pôvodného argumentu zmení, keď sa funkcia volá; príkaz byval zakazuje procedúru alebo kód, ktorý mení hodnotu argumentu.

Viem, že nie je ľahké pochopiť čítanie vysvetlenia, ale s praktickými príkladmi funkcií môžeme vlastne porozumieť lepšie.

Ako používať argument ByVal vo VBA?

Príklad č

Napríklad si pozrite nasledujúce 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 Koncový sub

Vo vyššie uvedených dvoch makro procedúrach máme v rámci postupov spoločnú premennú „k“. Skôr ako uvidíme výsledok, dovoľte mi to podrobne vysvetliť.

V prvom makre sme premennej „k“ priradili hodnotu 50.

Dim k As Integer k = 50

Ďalej sme nazvali druhý postup makra z prvého Makra.

Makro2 k

V systéme Macro2 sme obnovili hodnotu premennej na k = k + 5. V tomto makre sme pomocou argumentu ByVal priradili hodnotu premennej „k“.

Teraz, aby sme pochopili „ByVal“, spustime kód VBA po riadkoch stlačením klávesu F8.

# 1 - Pri prvom stlačení klávesu F8 sa zvýrazní prvý riadok makra1.

V tomto okamihu umiestnite kurzor na premennú „k“ a mala by ukazovať hodnotu premennej „k“.

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

# 2 - Stlačte kláves F8 ešte raz a preskočí sa na tretí riadok.

Aj teraz je hodnota „k“ stále nulová.

# 3 - Teraz stlačte kláves F8 a uvidíte hodnotu k.

Pretože je hodnota „k“ nastavená na 50 a vykoná sa kód, hodnota sa zobrazí ako 50.

# 4 - Teraz je zvýraznený riadok „Macro2 k“, tj. Stlačením klávesu F8 prejdete na druhý postup, Macro2.

# 5 - Aj teraz sa hodnota premennej „k“ v tomto postupe zobrazuje tiež ako 50. Ale v tomto makre resetujeme hodnotu premennej „k“ na k = k + 5, tj 55. Teraz stlačte Kláves F8 ešte dvakrát.

Ako vidíte vyššie, hodnota „k“ je teraz 55.

# 6 - Stlačením klávesu F8 prejdete späť na postup Macro1.

Keď makro preskočilo späť na pôvodnú procedúru Macro1, naša premenná hodnota „k“ už nie je 55, ale pôvodná hodnota v tomto postupe, tj 50.

Keď stlačíte kláves F8, uvidíme v okne správy vo VBA iba 50.

Takže, ako sme povedali na začiatku článku, argument „ByVal“ neprenáša hodnoty z jednej procedúry na druhú, aj keď v okamihu, keď narazí na riadok, prenáša hodnotu premennej z prvého makra na druhé “ ByVal “, keď sa vráti k pôvodnému makru, vynuluje hodnotu na pôvodnú hodnotu iba v procedúre.

Príklad č

Teraz sa pozrite na nasledujúce dve makrá.

Kód:

Sub P1 () Dim k As Integer: k = 10 Volať P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Je to podobné ako v prvom príklade. V makre „P1“ sme premennej „k“ priradili hodnotu 10 a v rovnakom makre „P1“ sme nazvali druhé makro „P2“ s premennou „k“.
  • V druhom makre „P2“ sme použili argument ByVal a tentoraz je hodnota premennej „k“ 15.

Toto makro prenáša hodnotu premennej „k“ ako desať z makra „P1“ na makro „P2“ a v tomto makre sa hodnota vynuluje na 15, ale v okamihu, keď sa vráti, aby sa makro dokončilo na prvé makro „P1“ hodnota „k“ späť na 10, nie na 15.

Na čo treba pamätať

Argument ByVal neovplyvňuje hodnotu premennej ani po spustení makra, ale pomocou argumentu By Ref môžeme prenášať hodnotu premennej z jedného makra do druhého.

Zaujímavé články...