Aký je rozdiel medzi argumentmi ByRef a ByVal? - Otázka na rozhovor s VBA

Obsah:

Anonim

Toto je jedna z najčastejšie kladených otázok v rozhovoroch VBA. V tomto článku sa dozvieme, aký je rozdiel medzi argumentmi ByVal a ByRef v programe Excel VBA.

Definície:

Argument ByRef: Je to doslovná krátka forma odkazu. Keď je argument odoslaný ako argument ByRef do iného podradeného prvku alebo funkcie, odošle sa odkaz na skutočnú premennú. Všetky zmeny vykonané v kópii premennej sa prejavia v pôvodnom argumente.
Môžeme povedať, že namiesto hodnoty je umiestnenie hodnoty odoslané do funkcie pomocou funkcie ByRef do funkcie.
Toto je predvolený argument vo VBA. Pred argumentom nemusíme písať ByRef.
Syntax:

Sub x (a ako variant)

„Alebo

Sub x (ByRef a as Variant)

Argument ByVal: Je to doslova krátka forma hodnoty. Keď je argument predaný ako argument ByVal inému podradenému prvku alebo funkcii, odošle sa iba hodnota argumentu. Pôvodný argument zostáva nedotknutý. Akékoľvek zmeny vykonané v cudzej funkcii alebo podradenej položke sa neprejavia v pôvodnom argumente.
Ak chcete argument deklarovať ako ByVal, musíte pred argumentom použiť kľúčové slovo ByVal.
Syntax:
Sub x (ByVal a ako variant)
Teraz poznáme definície. Pozrime sa na príklad a prekonajme to.

Príklad ByRef

Tu je jednoduchý program.

Sub X (variant ByRef a As) a = 20 Debug.Print "v hodnote sub X a =" & a End Sub Sub Y () a = 10 Zavolajte X (a) Debug.Print "na hodnotu sub Y a =" & a Koniec pod 

Takže tu máme dva podprogramy. Prvá čiastka je X, ktorá má variantný argument ako ByRef.
(Kľúčové slovo ByRef môžete vynechať. Je to predvolené nastavenie.)
Ďalej je to nastavenie hodnoty a = 20 end potom vytlačí hodnotu a.

Sub Y je hlavný podprogram, ktorý nazýva podprogram X. Nastavuje hodnotu a = 10 potom zavolá podprogram X a prejdea ako argument. Potom vytlačí hodnotu a v Y.

Keď spustíte Sub Y, toto je výstup, ktorý získate.
v sub X hodnote a = 20

v sub Y hodnote a = 20

Záver: Hodnota originálu a je zmenená o sub X a nastavená na 20 pre obidve sub.
môžete vidieť, že keď Sub Y beží, počiatočná hodnota a bola 10. Y volá X (a). X nastaví hodnotu a = 20. Vytlačí sa „v hodnote sub X a = 20“. Ovládací prvok sa vráti k y a vytlačí hodnotu sub Y a = 20.
Toto je účinok argumentu ByRef.

Príklad ByVal:

Toto je príklad ByVal

Sub X (variant ByVal a As) a = 20 Debug.Print "v hodnote sub X a =" & a End Sub Sub Y () a = 10 Zavolajte X (a) Debug.Print "v hodnote Y pod a =" & a Koniec pod

Oba príklady sú rovnaké s jediným rozdielom v odovzdávaní argumentov. Tu v X sú argumenty deklarované ako ByVal. Keď tentoraz spustíte podprogram Y, výstup je:

v sub X hodnote a = 20
v sub Y hodnote a = 10


Záver: Hodnota originálu a sa NEMENÍ podbodom X. Je 20 pre X a 10 pre Y.

Keď Y zavolá X s a, pošle iba hodnotu a nie adresu a. Akákoľvek zmena vykonaná v a sa preto neodrazí v pôvodnej premennej.

Na test, ak je hodnota tlače a v X pred nastavením na 20 vytlačí 10. Pretože 10 je odovzdané do a v X pomocou byVal. Pomocou ByRef, ktorý ste odoslali z Y do a z X.

Je to jednoduchá otázka, ale mnohí z nás si to mýlia s otázkou v rozhovore pre vba. Dôvodom je, že ho príliš nevyužívame. Väčšinu času kopírujeme hodnotu do rôznych premenných.

Takže áno, chlapci, toto je rozdiel medzi argumentmi ByRef a ByVal v programe Excel VBA. Dajte mi vedieť, ak máte akékoľvek otázky týkajúce sa tejto témy alebo akejkoľvek inej témy VBA alebo Excel. Sekcia komentárov je vaša.

Pridajte a uložte nový zošit pomocou jazyka VBA v programe Microsoft Excel 2016

Zobrazte správu na stavovom riadku programu Excel VBA

Vypnite varovné správy pomocou VBA v programe Microsoft Excel 2016

Populárne články:

Funkcia VLOOKUP v programe Excel

COUNTIF v Exceli 2016

Ako používať funkciu SUMIF v programe Excel