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