VBA ByVal - Kā izmantot ByVal Function Argument? (Piemēri)

Excel VBA ByVal funkcijas arguments

ByVal ir paziņojums VBA. ByVal nozīmē By Value, ti, kad apakšprocedūra tiek pieprasīta no procedūras, mainīgo vērtība tiek atiestatīta uz jauno vērtību no jaunās izsauktās procedūras.

VBA, strādājot ar funkcijām, kuras izsauc dažādās funkcijās, pastāv zināmi apstākļi, ka, izsaucot funkciju, sākotnējā argumenta vērtība tiek mainīta; paziņojums byval aizliedz procedūru vai kodu mainīt argumenta vērtību.

Es zinu, ka to nav viegli saprast, lasot skaidrojumu, taču, izmantojot praktiskus funkciju piemērus, mēs patiesībā varam saprast labāk.

Kā izmantot ByVal Argument VBA?

1. piemērs

Piemēram, apskatiet zemāk redzamos VBA kodus.

Kods:

Apakšmakro1 () Dim k As Integer k = 50 Makro2 k MsgBox k Beigās Sub
Apakšmakro2 (ByVal k kā vesels skaitlis) k = k + 5 Beigu apakšgrupa

Iepriekš minētajās divās makro procedūrās mums ir kopīgs mainīgais “k” visās procedūrās. Ļaujiet man to detalizēti paskaidrot, pirms mēs redzam rezultātu.

Pirmajā makro mēs mainīgajam “k” esam piešķīruši vērtību 50.

Dim k kā veselais skaitlis k = 50

Tālāk mēs esam saukuši otro makro procedūru no pirmā makro.

Makro2 k

Macro2 mēs esam atiestatījuši mainīgā vērtību uz k = k + 5. Šajā makro mēs izmantojām argumentu ByVal, lai piešķirtu vērtību mainīgajam “k”.

Tagad, lai saprastu “ByVal”, palaidīsim VBA kodu pa rindai, nospiežot taustiņu F8.

# 1 - vispirms nospiežot taustiņu F8, tas izceļ Macro1 pirmo rindu.

Šajā brīdī novietojiet kursoru uz mainīgā “k”, un tam jāparāda mainīgā “k” vērtība.

Pašlaik “k” vērtība ir nulle.

# 2 - Vēlreiz nospiediet taustiņu F8, un tas pāriet uz trešo līniju.

Pat tagad “k” vērtība joprojām ir nulle.

# 3 - Tagad nospiediet taustiņu F8 un skatiet k vērtību.

Tā kā “k” vērtība ir iestatīta uz 50 un kods tiek izpildīts, un tā vērtība ir 50.

# 4 - Tagad iezīmētā līnija ir “Macro2 k”, ti, nospiežot taustiņu F8, tā pāriet uz otro procedūru - Macro2.

# 5 - Arī tagad mainīgā “k” vērtība šajā procedūrā tiek rādīta kā 50. Bet šī makro iekšpusē mēs atiestatām mainīgā “k” vērtību kā k = k + 5, ti, 55. Tagad nospiediet F8 taustiņš vēl divas reizes.

Kā redzat iepriekš, “k” vērtība tagad ir 55.

# 6 - nospiediet taustiņu F8, un tas atgriezīsies pie Macro1 procedūras.

Kad makro atgriezās pie sākotnējās procedūras Macro1, mūsu mainīgā “k” vērtība vairs nav 55, bet gan sākotnējā vērtība šajā procedūrā, ti, 50.

Nospiežot taustiņu F8, VBA ziņojumu lodziņā mēs varam redzēt tikai 50.

Tātad, kā mēs esam teikuši raksta sākumā, arguments “ByVal” nenēsā vērtības no vienas procedūras uz otru, kaut arī mainīgā lielums tiek pārnests no pirmā makro uz otro līdz brīdim, kad tas sastopas ar rindu “ ByVal ”, atgriežoties pie sākotnējā makro, vērtība tiek atjaunota uz sākotnējo vērtību tikai procedūrā.

2. piemērs

Tagad ieskatieties zemāk redzamajos divos makro.

Kods:

Apakšdaļa P1 () Dim k kā vesels skaitlis: k = 10 Zvana P2 (k) MsgBox k Beigas apakš
Apakšapakšpunkts P2 (ByVal k kā veselais skaitlis) k = 15 Beigu apakšdaļa
  • Tas ir līdzīgs pirmajam piemēram. Ar makro "P1", mēs esam piešķirts vērtību 10 līdz mainīgo "k", un tajā pašā makro "P1", mēs esam sauc par otro makro "P2" ar mainīgo "k".
  • Otrajā makro “P2” mēs izmantojām argumentu ByVal, un šoreiz mainīgā “k” vērtība ir 15.

Šis makro nodrošina mainīgā “k” vērtību kā desmit no makro “P1” līdz makro “P2”, un šajā makro vērtība tiks atiestatīta uz 15, bet tajā brīdī, kad tā atgriezīsies, lai pabeigtu makro līdz pirmajam makro “P1” vērtības “k” vērtība ir 10, nevis 15.

Atceramās lietas

ByVal arguments neietekmē mainīgā vērtību pat pēc makro palaišanas, taču ar argumentu By Ref mēs varam pārnest mainīgā vērtību no viena makro uz otru.

Interesanti raksti...