VBA ByVal - Kaip naudoti „ByVal“ funkcijos argumentą? (Pavyzdžiai)

„Excel VBA ByVal“ funkcijos argumentas

„ByVal“ yra teiginys VBA. „ByVal“ reiškia „Pagal vertę“, ty kai pagal procedūrą iškviesta subprocedūra, kintamųjų reikšmė atstatoma į naują reikšmę iš naujosios pakviestos procedūros.

VBA, kai dirbame su funkcijomis, kurios yra iškviečiamos skirtingomis funkcijomis, yra tam tikrų aplinkybių, kad, iškviečiant funkciją, pirminio argumento vertė pasikeičia; byval sakinys draudžia procedūrą ar kodą, pakeičiantį argumento vertę.

Žinau, kad skaityti paaiškinimą nėra lengva suprasti, tačiau naudodamiesi praktiniais funkcijos pavyzdžiais, iš tikrųjų galime suprasti geriau.

Kaip naudoti „ByVal Argument“ VBA?

1 pavyzdys

Pavyzdžiui, pažvelkite į žemiau pateiktus VBA kodus.

Kodas:

1 papildomas makrokomandas () Dim k Kaip sveikasis skaičius k = 50 Makro2 k MsgBox k Pabaiga Sub
Antrasis makrokomandas 2 (ByVal k kaip sveikasis skaičius) k = k + 5 pabaigos antrinis

Pirmiau pateiktose dviejose makro procedūrose mes turime bendrą kintamąjį „k“ visose procedūrose. Leiskite man tai paaiškinti išsamiai, kol pamatysime rezultatą.

Pirmajame makrokomandoje kintamajam „k“ priskyrėme 50 reikšmę.

Dim k As sveikasis skaičius k = 50

Toliau mes pakvietėme antrąją makrokomandą iš pirmojo makrokomandos.

Makro2 k

„Macro2“ kintamojo reikšmę atstatėme į k = k + 5. Šioje makrokomandoje „ByVal“ naudojome reikšmę kintamajam „k“.

Dabar, norėdami suprasti „ByVal“, paleiskite VBA kodą eilutėje po eilutės paspausdami klavišą F8.

# 1 - Pirmiausia paspaudus klavišą F8, jis paryškins pirmąją „Macro1“ eilutę.

Šiuo metu užveskite žymeklį ant kintamojo „k“ ir jis turėtų rodyti kintamojo „k“ vertę.

Šiuo metu „k“ vertė lygi nuliui.

# 2 - dar kartą paspauskite klavišą F8 ir jis pereis į trečią eilutę.

Net ir dabar „k“ vertė vis tiek lygi nuliui.

# 3 - Dabar paspauskite klavišą F8 ir pamatykite k reikšmę.

Kadangi „k“ reikšmė nustatyta į 50, kodas vykdomas ir vertė rodoma kaip 50.

# 4 - Dabar paryškinta eilutė yra „Macro2 k“, ty, paspaudus klavišą F8, ji pereis prie antrosios procedūros „Macro2“.

# 5 - Net ir dabar kintamojo „k“ vertė šioje procedūroje taip pat rodoma kaip 50. Tačiau šios makrokomandos nustatome kintamojo „k“ reikšmę kaip k = k + 5, ty 55. Dabar paspauskite F8 klavišą dar du kartus.

Kaip matote aukščiau, „k“ vertė dabar yra 55.

# 6 - Paspauskite klavišą F8 ir jis grįš į „Macro1“ procedūrą.

Kai makrokomanda grįžo atgal į pradinę procedūrą „Macro1“, kintamoji „k“ reikšmė nebėra 55, o pradinė šios procedūros reikšmė, ty 50.

Paspaudus klavišą F8, VBA pranešimų laukelyje galime pamatyti tik 50.

Taigi, kaip jau sakėme straipsnio pradžioje, „ByVal“ argumentas neperduoda reikšmių iš vienos procedūros į kitą, nors jis pateikia kintamojo vertę nuo pirmosios makrokomandos iki sekundės, kai susiduria su eilute “ ByVal “, kai grįšite į pradinę makrokomandą, vertė bus grąžinta į pradinę vertę tik procedūros metu.

2 pavyzdys

Dabar pažvelkite į žemiau pateiktas dvi makrokomandas.

Kodas:

Sub P1 () Dim k kaip sveikasis skaičius: k = 10 Skambinkite P2 (k) MsgBox k End Sub
Sub P2 (ByVal k kaip sveikasis skaičius) k = 15 Pabaiga Sub
  • Tai panašu į pirmąjį pavyzdį. Makrokomandoje „P1“ kintamajam „k“ priskyrėme 10 reikšmę, o toje pačioje makrokomandoje „P1“ antrąją makrokomandą pavadinome „P2“ su kintamuoju „k“.
  • Antroje makrokomandoje „P2“ naudojome argumentą „ByVal“, o šį kartą kintamojo „k“ vertė yra 15.

Ši makrokomanda pateikia kintamojo „k“ reikšmę kaip dešimt iš makrokomandos „P1“ į makrokomandą „P2“, ir šioje makrokomandoje vertė bus nustatyta iš naujo į 15, tačiau tą akimirką, kai ji grįš, kad baigtų makrokomandą iki pirmosios makrokomandos „P1“ reikšmė „k“ grįžta į 10, o ne į 15.

Ką reikia atsiminti

Argumentas „ByVal“ neturi įtakos kintamojo vertei net paleidus makrokomandą, tačiau naudodami argumentą „By Ref“ galime perkelti kintamojo vertę iš vienos makrokomandos į kitą.

Įdomios straipsniai...