VBA ByVal - Kuinka käyttää ByVal-funktion argumenttia? (Esimerkkejä)

Excel VBA ByVal -funktion argumentti

ByVal on lausunto VBA: ssa. ByVal tarkoittaa arvoa, ts. Kun alimenettely kutsui menettelystä, muuttujien arvo palautetaan uuteen arvoon uudesta kutsutusta menettelystä.

Kun työskentelemme VBA: ssa eri funktioissa kutsuttujen toimintojen kanssa, on tietyissä olosuhteissa, että alkuperäisen argumentin arvo muuttuu, kun funktiota kutsutaan; byval-käsky kieltää menettelyn tai koodin, joka muuttaa argumentin arvoa.

Tiedän, ettei sitä ole helppo ymmärtää lukemalla selitystä, mutta käytännön esimerkkien avulla voimme itse ymmärtää paremmin.

Kuinka käyttää ByVal Argumentia VBA: ssa?

Esimerkki 1

Katso esimerkiksi alla olevia VBA-koodeja.

Koodi:

Alimakro1 () Dim k Kokonaislukuna k = 50 Makro2 k MsgBox k End Sub
Submakro2 (ByVal k kokonaislukuna) k = k + 5 End Sub

Edellä mainituissa kahdessa makromenettelyssä meillä on yhteinen muuttuja “k” kaikissa menettelyissä. Haluan selittää tämän yksityiskohtaisesti ennen kuin näemme tuloksen.

Ensimmäisessä makrossa olemme määrittäneet arvon 50 muuttujalle “k”.

Dim k kuten kokonaisluku k = 50

Seuraavaksi olemme kutsuneet toisen makromenettelyn ensimmäisestä makrosta.

Makro2 k

Makro2: ssa olemme palauttaneet muuttujan arvoksi k = k + 5. Tässä makrossa olemme käyttäneet ByVal-argumenttia osoittamaan arvon muuttujalle "k".

Nyt ymmärtääksemme "ByVal", ajetaan VBA-koodi rivi riviltä painamalla F8-näppäintä.

# 1 - Kun painat ensin F8-näppäintä, se korostaa Macro1: n ensimmäisen rivin.

Aseta tässä vaiheessa kohdistin muuttujan "k" päälle, ja sen pitäisi näyttää muuttujan "k" arvo.

Tällä hetkellä k: n arvo on nolla.

# 2 - Paina F8-näppäintä vielä kerran, niin se siirtyy kolmannelle riville.

Jopa nyt k: n arvo on edelleen nolla.

# 3 - Paina F8-näppäintä nyt ja katso k: n arvo.

Koska “k” -arvoksi on asetettu 50 ja koodi suoritetaan, arvo on siis 50.

# 4 - Nyt korostettu rivi on “Macro2 k”, eli painamalla F8-näppäintä, se siirtyy toiseen menettelyyn, Macro2.

# 5 - Jo nyt muuttujan "k" arvo tässä menettelyssä näkyy myös arvona 50. Mutta tämän makron sisällä nollataan muuttujan "k" arvo k = k + 5 eli 55. Paina nyt F8-näppäin vielä kaksi kertaa.

Kuten yllä voit nähdä, k-arvo on nyt 55.

# 6 - Paina F8-näppäintä ja se palaa takaisin Macro1-menettelyyn.

Kun makro palasi takaisin alkuperäiseen menettelyyn Macro1, muuttujan "k" arvo ei ole enää 55 pikemminkin kuin alkuperäinen arvo tässä menettelyssä eli 50.

Kun painat F8-näppäintä, VBA: n viestiruudussa näkyy vain 50.

Joten, kuten olemme sanoneet artikkelin alussa, "ByVal" -argumentti ei kanna arvoja yhdestä menettelystä toiseen, vaikka se kantaa muuttujan arvon ensimmäisestä makrosta toiseen hetkeksi, kun se kohtaa rivin " ByVal ”palatessaan alkuperäiseen makroon se palauttaa arvon alkuperäiseen arvoon vain menettelyssä.

Esimerkki 2

Katsokaa nyt kahta alla olevaa makroa.

Koodi:

Osa P1 () Dim k kokonaislukuna: k = 10 Soita P2 (k) MsgBox k End Sub
Osa P2 (ByVal k kokonaislukuna) k = 15 Loppuosa
  • Tämä on samanlainen kuin ensimmäinen esimerkki. Makrossa "P1" olemme määrittäneet arvon 10 muuttujalle "k" ja samassa makrossa "P1" olemme kutsuneet toista makroa "P2" muuttujalla "k".
  • Toisessa makrossa “P2” olemme käyttäneet ByVal-argumenttia, ja tällä kertaa muuttujan “k” arvo on 15.

Tämä makro kantaa muuttujan "k" arvon kymmeneksi makrosta "P1" makroksi "P2", ja tässä makrossa arvo palautetaan arvoon 15, mutta sillä hetkellä, kun se tulee takaisin loppuun makro ensimmäiseen makroon “P1” on arvon “k” arvo takaisin 10, ei 15.

Muistettavaa

ByVal-argumentti ei vaikuta muuttujan arvoon edes makron suorittamisen jälkeen, mutta By Ref-argumentin avulla voimme siirtää muuttujan arvon makrosta toiseen.

Mielenkiintoisia artikkeleita...