Excel VBA ByRef и ByVal
Вы можете передать аргументы процедуры (функции или к югу) по ссылке или по значению. По умолчанию Excel VBA передает аргументы по ссылке. Как всегда, мы будем использовать простой пример, чтобы сделать вещи более ясно.
Поместите командную кнопку на листе и добавьте строки следующего кода:
Dim x As Integer x = 10 MsgBox Triple(x) MsgBox x
Этот код вызывает функцию тройной. Это результат второго MsgBox мы заинтересованы. Функции должны быть помещены в модуль.
-
Откройте редактор Visual Basic и выберите Вставка, модуль.
-
Добавьте следующие строки кода:
Function Triple(ByRef x As Integer) As Integer x = x 3 Triple = x End Function
Результат при нажатии на кнопку управления на листе:
-
Заменить ByRef с ByVal.
Function Triple(ByVal x As Integer) As Integer x = x 3 Triple = x End Function
Результат при нажатии на кнопку управления на листе:
Объяснение: При передаче аргументов по ссылке, мы ссылаемся на исходное значение. Значение х (исходное значение) изменяется в функции. В результате во второй MsgBox отображает значение 30. При передаче аргументов по значению мы передаем копию функции. Первоначальная стоимость не изменяется. В результате второго MsgBox отображает значение 10 (исходное значение).