VBA ByVal - Kuidas kasutada funktsiooni Argument ByVal? (Näited)

Lang L: none (table-of-contents)

Exceli VBA ByVali funktsiooni argument

ByVal on avaldus VBA-s. ByVal tähistab väärtust, st kui protseduurilt on vaja alamprotseduuri, lähtestatakse muutujate väärtus uuele väärtusele uuest kutsutud protseduurist.

VBA-s töötades funktsioonides, mida kutsutakse erinevates funktsioonides, on teatud asjaoludel, et funktsiooni kutsumisel muutub algse argumendi väärtus; byvali lause keelab protseduuri või koodi, mis muudab argumendi väärtust.

Ma tean, et seda pole selgitust lugedes lihtne mõista, kuid funktsionaalsete praktiliste näidete abil saame tegelikult paremini aru.

Kuidas kasutada ByVal Argumenti VBA-s?

Näide 1

Näiteks vaadake allpool olevaid VBA-koode.

Kood:

Alammakro1 () Dim k As täisarv k = 50 Makro2 k MsgBox k Lõpp alam
Alamakro2 (ByVal k täisarvuna) k = k + 5 Lõpp-alam

Kahes ülaltoodud makroprotseduuris on meil protseduuride lõikes ühine muutuja k. Las ma selgitan seda üksikasjalikult, enne kui tulemust näeme.

Esimeses makros määrasime muutujale „k” väärtuse 50.

Hämm k täisarvuna k = 50

Järgmisena oleme kutsunud esimese makro teise makroprotseduuri.

Makro2 k

Macro2-s oleme muutuja väärtuse lähtestanud väärtusele k = k + 5. Selles makros kasutasime muutujale k väärtuse ByVali argumendi abil.

Nüüd, et mõista "ByVali", käivitame VBA koodi rea kaupa, vajutades klahvi F8.

# 1 - kui vajutate kõigepealt klahvi F8, tõstab see esile Macro1 esimese rea.

Sel hetkel asetage kursor muutujale „k” ja see peaks näitama muutuja „k” väärtust.

Praegu on “k” väärtus null.

# 2 - vajutage veel kord klahvi F8 ja see hüppab kolmandale reale.

Isegi praegu on k väärtus endiselt null.

# 3 - vajutage kohe klahvi F8 ja näete k väärtust.

Kuna “k” väärtuseks on seatud 50 ja kood täidetakse ning väärtus on 50.

# 4 - Nüüd on esile tõstetud rida „Macro2 k”, st vajutades klahvi F8, liigutakse teise protseduuri juurde, Macro2.

# 5 - Isegi nüüd näitab selle protseduuri muutuja “k” väärtus 50. Kuid selle makro sees lähtestame muutuja “k” väärtuse k = k + 5 st 55. Nüüd vajutage F8 klahvi veel kaks korda.

Nagu eespool näha, on k väärtus nüüd 55.

# 6 - vajutage klahvi F8 ja see hüppab tagasi Macro1 protseduuri juurde.

Kui makro hüppas tagasi algse protseduuri Macro1 juurde, pole meie muutuja “k” väärtus enam 55 kui selle protseduuri algne väärtus, st 50.

Kui vajutate klahvi F8, näeme VBA sõnumikastis ainult 50.

Niisiis, nagu me artikli alguses ütlesime, ei kanna argument "ByVal" väärtusi ühelt protseduurilt teisele, kuigi see kannab muutuja väärtust esimesest makrost teiseks hetkeks, mil ta reaga kokku puutub " ByVal ”, kui ta tuleb tagasi algsesse makrosse, lähtestab see väärtuse algsele väärtusele ainult protseduuris.

Näide 2

Nüüd heitke pilk kahele allpool toodud makrole.

Kood:

Alam P1 () Dim k täisarvuna: k = 10 Kõne P2 (k) MsgBox k Lõpp alam
Alam P2 (ByVal k täisarvuna) k = 15 Lõpp-alam
  • See sarnaneb esimese näitega. Makros "P1" oleme määranud muutujale "k" väärtuse 10 ja samas makros "P1" nimetanud teist makrot muutujaks " P2" muutujaga "k".
  • Teises makros “P2” oleme kasutanud argumenti ByVal ja seekord on muutuja “k” väärtus 15.

See makro kannab muutuja “k” väärtust kümnena makrost “P1” makroni “P2” ja selles makros lähtestatakse väärtus 15-le, kuid hetkel, kui see tuleb tagasi, et makro lõpetada esimese makroga “P1” on väärtuse “k” väärtus tagasi 10, mitte 15.

Asjad, mida meeles pidada

ByVali argument ei mõjuta muutuja väärtust isegi pärast makro käivitamist, kuid argumendi By Ref abil saame muutuja väärtuse ühest makrost teise kanda.

Huvitavad Artiklid...