Това е един от най -често задаваните въпроси в интервюта за 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