Excel VBA ByVal Function argumentum
A ByVal egy nyilatkozat a VBA-ban. A ByVal azt jelenti, hogy By Value, azaz amikor az eljárásból behívott alfolyamat a változók értékét visszaállítja a meghívott új eljárás új értékére.
A VBA-ban, amikor különböző függvényekben meghívott függvényekkel dolgozunk, bizonyos körülmények között az eredeti argumentum értéke megváltozik a függvény meghívásakor; a byval utasítás tiltja az argumentum értékét megváltoztató eljárást vagy kódot.
Tudom, hogy a magyarázat elolvasásával nem könnyű megérteni, de a funkció gyakorlati példáival valójában jobban megértjük.

Hogyan használható a ByVal Argument a VBA-ban?
1. példa
Nézze meg például az alábbi VBA kódokat.
Kód:
1. makró1 () Dim k As Egész szám k = 50 Makró2 k MsgBox k Vége Sub
2. makró2 (ByVal k egész számként) k = k + 5 vége alsz

A fenti két makroeljárásban az összes eljáráson belül közös „k” változóval rendelkezünk. Hadd magyarázzam el ezt részletesen, mielőtt látnánk az eredményt.
Az első makróban az 50 értéket rendeltük a „k” változóhoz.
Dim k As egész szám k = 50
Ezután az első makróból meghívtuk a második makróeljárást.
Makró2 k
A Macro2-ben a változó értékét visszaállítottuk k = k + 5 értékre. Ebben a makróban a ByVal argumentummal értéket rendeltünk a „k” változóhoz.
A „ByVal” megértése érdekében futtassuk soronként a VBA kódot az F8 billentyű lenyomásával.
# 1 - Az F8 billentyű első megnyomásakor kiemeli a Macro1 első vonalát.

Ebben az időpontban helyezzen egy kurzort a „k” változóra, és megmutatja a „k” változó értékét.

Jelenleg a „k” értéke nulla.
# 2 - Nyomja meg még egyszer az F8 billentyűt, és a harmadik sorra ugrik.

Most is a „k” értéke nulla.
# 3 - Nyomja meg az F8 billentyűt, és nézze meg a k értékét.

Mivel a „k” érték 50-re van állítva, és a kód végrehajtásra kerül, így az érték 50-nek tűnik.
# 4 - Most a kiemelt sor „Macro2 k”, azaz az F8 billentyű lenyomásával a második eljárásra, a Macro2-re ugrik.

# 5 - Most is a „k” változó értéke ebben az eljárásban 50-ként jelenik meg. De ebben a makrón belül a „k” változó értékét visszaállítjuk k = k + 5, azaz 55 értékre. Most nyomja meg a Az F8 billentyűt még kétszer.

Mint fent látható, a „k” értéke most 55.
# 6 - Nyomja meg az F8 billentyűt, és ez visszatér a Macro1 eljáráshoz.

Amikor a makró visszatért az eredeti Macro1 eljáráshoz, a változó „k” értékünk már nem 55, hanem inkább az eredeti érték ebben az eljárásban, azaz 50.
Amikor megnyomja az F8 billentyűt, csak 50-et láthatunk a VBA üzenetmezőjében.

Tehát, amint azt a cikk elején elmondtuk, a „ByVal” argumentum nem hordoz értékeket egyik eljárásból a másikba, annak ellenére, hogy a változó értékét az első makróról a másodikra hordozza, amikor a sorral találkozik. ByVal ”, amikor visszatér az eredeti makróhoz, az értéket csak az eljárás során állítja vissza eredeti értékre.
2. példa
Most vessen egy pillantást az alábbi két makróra.
Kód:
P1 alrész () Dim k egész számként: k = 10 Hívja P2 (k) MsgBox k Vége alrész
P2 rész (ByVal k egész számként) k = 15 Vége Sub

- Ez hasonló az első példához. A „P1” makrón a 10 értéket rendeltük a „k” változóhoz, és ugyanabban a „P1” makróban a második makrót „P2” -nek neveztük „k” változóval.
- A második „P2” makróban a ByVal argumentumot használtuk, és ezúttal a „k” változó értéke 15.
Ez a makró a „k” változó értékét tízként hordozza a „P1” makróról a „P2” makróra, és ebben a makróban az érték 15-re áll vissza, de abban a pillanatban, amikor visszatér, befejezi a makrót az első makróig „P1” a „k” értéke 10-re, nem pedig 15-re.

Dolgok, amikre emlékezni kell
A ByVal argumentum a makró futtatása után sem befolyásolja a változó értékét, de a By Ref argumentummal átvihetjük a változó értékét egyik makróról a másikra.