Каква е разликата между аргументите ByRef и ByVal? - Въпрос за интервю за VBA

Съдържание:

Anonim

Това е един от най -често задаваните въпроси в интервюта за VBA. В тази статия ще научим каква е разликата между аргументите ByVal и ByRef в excel VBA.

Определения:

Аргумент ByRef: Това е буквалната кратка форма на позоваване. Когато един аргумент се предава като ByRef аргумент на различна под -функция или функция, се изпраща препратката към действителната променлива. Всички промени, направени в копието на променливата, ще бъдат отразени в оригиналния аргумент.
Можем да кажем, че вместо стойност, местоположението на стойността се изпраща до функция, използвайки ByRef към функция.
Това е аргументът по подразбиране във VBA. Не е нужно да пишем ByRef преди аргумента.
Синтаксис:

Sub x (a като вариант)

'Или

Sub x (ByRef a като вариант)

Аргумент на ByVal: Това е буквално кратка форма на по стойност. Когато аргумент се предава като аргумент ByVal на различна под -функция или функция, се изпраща само стойността на аргумента. Първоначалният аргумент се оставя непокътнат. Всички промени, направени в чуждестранна функция или под, няма да се отразят в първоначалния аргумент.
За да декларирате аргумент като ByVal, трябва да използвате ключовата дума ByVal преди аргумента.
Синтаксис:
Sub x (ByVal a като вариант)
Сега знаем определенията. Нека да видим пример и да приключим с него.

Пример от ByRef

Ето една проста програма.

Sub X (ByRef a As Variant) a = 20 Debug.Print "in sub X value of a =" & a End Sub Sub Y () a = 10 Извикайте X (a) Debug.Print "в под Y стойност на a =" & a End Sub 

И така, тук имаме две подпрограми. Първият под е X, който приема аргумент за вариант като ByRef.
(Можете да пропуснете ключовата дума ByRef. Това е по подразбиране.)
След това задава стойността на а = 20 end отпечатва стойността на a.

Под Y е основната подпрограма, която извиква подпрограма х. Той определя стойността на а = 10 след това извиква подпрограма X и преминаваа като аргумент. След това отпечатва стойност на а в Y.

Сега, когато стартирате Sub Y, това е изходът, който получавате.
в под X стойност на a = 20

в под Y стойност на a = 20

Заключение: Стойността на оригинала a се променя от под X и се задава на 20 за двата подкана.
можете да видите, че когато Sub Y работи, първоначалната стойност на a беше 10. Y извиква X (a). X задава стойност на a = 20. Той отпечатва „в под X стойност на a = 20“. Контролът се връща към y и отпечатва в под Y стойност от a = 20.
Това е ефектът от аргумента ByRef.

Пример от ByVal:

Това е пример на ByVal

Sub X (ByVal a As Variant) a = 20 Debug.Print "in sub X value of a =" & a End Sub Sub Y () a = 10 Извикайте X (a) Debug.Print "в под Y стойност на a =" & a End Sub

И двата примера са еднакви с единствената разлика в предаването на аргументи. Тук в X аргументите са декларирани като ByVal. Когато изпълните подпрограма Y този път изходът е:

в под X стойност на a = 20
в под Y стойност на a = 10


Заключение: Стойността на оригинала a НЕ се променя от под X. Тя е 20 за X и 10 за Y.

Когато Y извика X с a, той изпраща само стойността на a, а не адреса на a. Следователно всяка промяна, направена в a, не се отразява в оригиналната променлива.

За тест, ако стойността на печат е а в X, преди да го зададете на 20, той ще отпечата 10. Тъй като 10 се предава на a в X с помощта на byVal. Използвайки изпратения от вас ByRef а от Y да се а от X.

Това е лесен въпрос, но много от нас объркват този въпрос във въпрос за интервю във vba. Причината е, че няма да го използваме много. През повечето време копираме стойността в различна променлива.

Така че да, момчета, това е разликата между аргументите ByRef и ByVal в Excel VBA. Кажете ми, ако имате някакви съмнения относно тази тема или друга VBA или Excel тема. Разделът за коментари е изцяло ваш.

Добавяне и запазване на нова работна книга с помощта на VBA в Microsoft Excel 2016

Показване на съобщение в лентата за състоянието на Excel VBA

Изключете предупредителните съобщения с помощта на VBA в Microsoft Excel 2016

Популярни статии:

Функцията VLOOKUP в Excel

COUNTIF в Excel 2016

Как да използвате функцията SUMIF в Excel