Ovo je jedno od najčešće postavljanih pitanja u VBA intervjuima. U ovom ćemo članku naučiti koja je razlika između ByVal i ByRef argumenata u Excelu VBA.
Definicije:
Argument ByRef: To je doslovni kratki oblik reference. Kada se argument prenese kao ByRef argument na drugu pod -funkciju ili funkciju, šalje se referenca stvarne varijable. Sve promjene napravljene u kopiji varijable bit će odražene u izvornom argumentu.
Možemo reći da se umjesto vrijednosti mjesto vrijednosti šalje funkciji pomoću funkcije ByRef u funkciju.
Ovo je zadani argument u VBA -i. Ne moramo pisati ByRef prije argumentacije.
Sintaksa:
Sub x (a kao varijanta)
'Ili
Sub x (ByRef a kao varijanta)
ByVal argument: To je doslovno kratki oblik vrijednosti. Kad se argument prenese kao ByVal argument na drugu pod -funkciju ili funkciju, šalje se samo vrijednost argumenta. Izvorni argument ostaje netaknut. Sve promjene napravljene u stranoj funkciji ili podmeniju neće se odraziti u izvornom argumentu.
Za deklariranje argumenta kao ByVal morate koristiti ključnu riječ ByVal prije argumenta.
Sintaksa:
Sub x (ByVal a kao varijanta)
Sada znamo definicije. Pogledajmo primjer i prebolimo ga.
Primjer ByRefa
Evo jednostavnog programa.
Pod X (ByRef a kao varijanta) a = 20 Debug.Print "in sub X value of a =" & a Završi pod -pod Y () a = 10 Pozovite X (a) Debug.Print "u pod Y vrijednosti od a =" & a Kraj podm
Dakle, ovdje imamo dvije podrutine. Prva podmena je X koja uzima varijantni argument kao ByRef.
(Možete izostaviti ključnu riječ ByRef. Zadana je vrijednost.)
Zatim postavlja vrijednost a = 20 end ispisuje vrijednost a.
Pod Y je glavna potprogram koja naziva potprogram x. Postavlja vrijednost od a = 10 zatim poziva potprogram X i prolazia kao argument. Zatim ispisuje vrijednost od a u Y.
Kad pokrenete Sub Y, ovo je izlaz koji dobijete.
u pod X vrijednost a = 20
u pod Y vrijednost a = 20
Zaključak: Vrijednost izvornika a mijenja se pod X i postavlja na 20 za oba podskupina.
možete vidjeti da je prilikom pokretanja Sub Y početna vrijednost a bila 10. Y poziva X (a). X postavlja vrijednost a = 20. Ispisuje "u sub X vrijednosti a = 20". Kontrola se vraća na y i ispisuje u vrijednosti ispod Y od a = 20.
Ovo je učinak ByRef argumenta.
Primjer ByVala:
Ovo je ByVal primjer
Sub X (ByVal a kao varijanta) a = 20 Debug.Print "in sub X value of a =" & a Završi pod -pod Y () a = 10 Pozovite X (a) Debug.Print "u pod Y vrijednosti od a =" & a Kraj podm
Oba primjera su ista s jedinom razlikom u prenošenju argumenata. Ovdje u X, argumenti su deklarirani kao ByVal. Kada ovaj put pokrenete potprogram Y, izlaz je:
u pod X vrijednost a = 20
u pod Y vrijednosti a = 10
Zaključak: Vrijednost izvornika a se NE mijenja pod X. Ona je 20 za X i 10 za Y.
Kad Y pozove X s a, on šalje samo vrijednost a, a ne adresu a. Stoga se svaka promjena napravljena u a ne odražava u izvornoj varijabli.
Za test, ako je vrijednost ispisa od a u X -u prije nego što ga postavite na 20, ispisat će 10. Budući da se 10 prenosi u X u sustavu byVal. Koristeći ByRef koji ste poslali a od Y do a od X.
Lako je pitanje, ali mnogi od nas zbunjuju ovo pitanje u intervjuu vba. Razlog je što ga ne stignemo puno koristiti. Većinu vremena kopiramo vrijednost u drugu varijablu.
Pa da, dečki, ovo je razlika bw ByRef i ByVal argumenata u excelu VBA. Javite mi ako imate bilo kakvih nedoumica u vezi ove teme ili bilo koje druge teme VBA ili Excel. Odjeljak s komentarima je samo vaš.
Dodajte i spremite novu radnu knjigu pomoću VBA -a u programu Microsoft Excel 2016
Prikažite poruku na statusnoj traci programa Excel VBA
Isključite poruke upozorenja pomoću VBA u programu Microsoft Excel 2016
Popularni članci:
Funkcija VLOOKUP u Excelu
COUNTIF u Excelu 2016
Kako koristiti funkciju SUMIF u Excelu