Вы можете передать аргументы процедуры (функции или к югу) по ссылке или по значению. По умолчанию Excel VBA передает аргументы по ссылке. Как всегда, мы будем использовать простой пример, чтобы сделать вещи более ясно.

Поместите командную кнопку на листе и добавьте строки следующего кода:

Dim x As Integer

x = 10

MsgBox Triple(x)

MsgBox x

Этот код вызывает функцию тройной. Это результат второго MsgBox мы заинтересованы. Функции должны быть помещены в модуль.

  1. Откройте редактор Visual Basic и выберите Вставка, модуль.

  2. Добавьте следующие строки кода:

Function Triple(ByRef x As Integer) As Integer

x = x  3

Triple = x

End Function

Результат при нажатии на кнопку управления на листе:

ByRef Result

ByRef Result

  1. Заменить ByRef с ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x  3

Triple = x

End Function

Результат при нажатии на кнопку управления на листе:

ByVal Result

ByVal Result

Объяснение: При передаче аргументов по ссылке, мы ссылаемся на исходное значение. Значение х (исходное значение) изменяется в функции. В результате во второй MsgBox отображает значение 30. При передаче аргументов по значению мы передаем копию функции. Первоначальная стоимость не изменяется. В результате второго MsgBox отображает значение 10 (исходное значение).