Это один из самых часто задаваемых вопросов в интервью VBA. В этой статье мы узнаем, в чем разница между аргументами ByVal и ByRef в excel VBA.

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

Аргумент ByRef: это буквальная короткая форма ссылки. Когда аргумент передается как аргумент ByRef другой подгруппе или функции, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.

Мы можем сказать, что вместо значения местоположение значения отправляется в функцию с помощью ByRef в функцию.

Это аргумент по умолчанию в VBA. Нам не нужно писать ByRef перед аргументом.

Синтаксис:

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

‘Или Sub x (ByRef a as Variant)

Аргумент 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

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Итак, здесь у нас есть две подпрограммы. Первый sub — это X, который принимает вариантный аргумент как ByRef. (Вы можете опустить ключевое слово ByRef. Оно используется по умолчанию.)

Затем он устанавливает значение a = 20 end, а затем печатает значение a.

Sub Y — это основная подпрограмма, которая вызывает подпрограмму X. Она устанавливает значение a = 10, затем вызывает подпрограмму X и передаетa в качестве аргумента.

Затем он печатает значение a в Y.

Теперь, когда вы запустите Sub Y, вы получите такой результат.

в суб-X значение a = 20 в суб-Y значение a = 20

0046

Вывод: значение оригинала 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

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Оба примера одинаковы, за исключением передачи аргументов.

Здесь, в X, аргументы объявлены как ByVal. Когда вы запускаете подпрограмму Y, на этот раз вывод будет:

в суб-X значение a = 20 в суб-Y значение a = 10

0047

Вывод: значение исходного a НЕ изменяется под X. Оно равно 20 для X и 10 для Y. Когда Y вызывает X с помощью a, он отправляет только значение a, а не адрес a.

Следовательно, любое изменение, сделанное в a, не отражается в исходной переменной.

Для проверки, если напечатать значение a в X перед тем, как установить его на 20, будет напечатано 10. Поскольку 10 передается в a в X с помощью byVal. Используя ByRef, вы отправили из Y в X.

0048

Это простой вопрос, но многие из нас путают его в вопросе интервью vba. Причина в том, что мы мало что используем. В большинстве случаев мы копируем значение в другую переменную. * Итак, ребята, в этом разница между аргументами ByRef и ByVal в excel VBA. Дайте мне знать, если у вас есть какие-либо сомнения относительно этой темы или любой другой темы VBA или Excel. Раздел комментариев — все ваше.

Статьи по теме:

link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов подтверждения с помощью VBA в Microsoft Excel]

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016]

link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Показать сообщение в строке состояния Excel VBA]

link: / general-themes-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016]

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

link: / формулы-и-функции-введение-функции vlookup [Функция ВПР в Excel]

link: / tips-countif-in-microsoft-excel [СЧЁТЕСЛИ в Excel 2016]

link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel]