Jaký je rozdíl mezi argumenty ByRef a ByVal? - Dotaz na rozhovor VBA

Obsah:

Anonim

Toto je jedna z nejčastěji kladených otázek v rozhovorech VBA. V tomto článku se naučíme, jaký je rozdíl mezi argumenty ByVal a ByRef v excel VBA.

Definice:

Argument ByRef: Je to doslovná krátká forma odkazu. Když je argument předán jako argument ByRef jinému sub nebo funkci, je odeslán odkaz na skutečnou proměnnou. Jakékoli změny provedené v kopii proměnné se projeví v původním argumentu.
Můžeme říci, že místo hodnoty je místo hodnoty odesláno do funkce pomocí funkce ByRef do funkce.
Toto je výchozí argument ve VBA. Před argumentem nemusíme psát ByRef.
Syntax:

Sub x (a jako varianta)

'Nebo

Sub x (ByRef a jako varianta)

Argument ByVal: Je to doslova krátká forma hodnoty. Když je argument předán jako argument ByVal jinému sub nebo funkci, je odeslána pouze hodnota argumentu. Původní argument zůstává nedotčen. Jakékoli změny provedené v cizí funkci nebo dílčí funkci nebudou v původním argumentu zohledněny.
Chcete -li deklarovat argument jako ByVal, musíte před argumentem použít klíčové slovo ByVal.
Syntax:
Sub x (ByVal a jako varianta)
Nyní známe definice. Podívejme se na příklad a překonejme to.

Příklad ByRef

Zde je jednoduchý program.

Sub X (varianta ByRef a As) a = 20 Debug.Print "v hodnotě sub X a =" & a End Sub Sub Y () a = 10 Volání X (a) Debug.Print "v hodnotě sub Y a =" & a End Sub 

Takže tady máme dva podprogramy. První sub je X, který má variantní argument jako ByRef.
(Klíčové slovo ByRef můžete vynechat. Je to výchozí nastavení.)
Dále nastavuje hodnotu a = 20 end poté vytiskne hodnotu a.

Sub Y je hlavní podprogram, který volá podprogram X. Nastavuje hodnotu a = 10 poté zavolá podprogram X a projdeA jako argument. Poté vytiskne hodnotu A v Y.

Když spustíte Sub Y, toto je výstup, který získáte.
v hodnotě sub X a = 20

v hodnotě sub Y a = 20

Závěr: Hodnota originálu a je změněna sub X a nastavena na 20 pro oba sub.
můžete vidět, že když běží Sub Y, počáteční hodnota a byla 10. Y volá X (a). X nastaví hodnotu a = 20. Vytiskne „v hodnotě sub X a = 20“. Řízení přejde zpět na y a vytiskne hodnotu sub Y a = 20.
Toto je účinek argumentu ByRef.

Příklad ByVal:

Toto je příklad ByVal

Sub X (ByVal a As Variant) a = 20 Debug.Print "v hodnotě sub X a =" & a End Sub Sub Y () a = 10 Volání X (a) Debug.Print "v hodnotě sub Y a =" & a End Sub

Oba příklady jsou stejné s jediným rozdílem v předávání argumentů. Zde v X jsou argumenty deklarovány jako ByVal. Když tentokrát spustíte podprogram Y, výstup je:

v hodnotě sub X a = 20
v hodnotě sub Y a = 10


Závěr: Hodnota originálu a není změněna sub X. Je 20 pro X a 10 pro Y.

Když Y zavolá X pomocí a, odešle pouze hodnotu a ne adresu a. Jakákoli změna provedená v a se tedy v původní proměnné neprojeví.

Pro test, pokud je tisková hodnota A v X před nastavením na 20 vytiskne 10. Protože 10 je předáno do v X pomocí byVal. Pomocí ByRef, který jste poslali a Y na a X.

Je to snadná otázka, ale mnozí z nás si to pletou v otázce rozhovoru vba. Důvodem je, že jej příliš nevyužíváme. Většinu času kopírujeme hodnotu do jiné proměnné.

Takže jo, lidi, to je rozdíl mezi argumenty ByRef a ByVal v excel VBA. Dejte mi vědět, pokud máte jakékoli pochybnosti týkající se tohoto tématu nebo jiného tématu VBA nebo Excel. Sekce komentářů je celá vaše.

Přidat a uložit nový sešit pomocí jazyka VBA v aplikaci Microsoft Excel 2016

Zobrazit zprávu na stavovém řádku aplikace Excel VBA

Vypněte varovné zprávy pomocí VBA v aplikaci Microsoft Excel 2016

Oblíbené články:

Funkce VLOOKUP v Excelu

COUNTIF v aplikaci Excel 2016

Jak používat funkci SUMIF v aplikaci Excel