Эффективная передача аргументов

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

Чтобы передать аргумент по значению, включите в объявление процедуры ключевое слово ByVal. Аргументы, передаваемые значением, потребляют от 2 до 16 байт в процедуре в зависимости от типа данных аргумента. Передача крупных типов данных занимает немного больше времени. В связи с этим не рекомендуется передавать по значению типы данных String и Variant.

При передаче аргумента по значению исходная переменная копируется. Изменения аргумента в рамках процедуры не отражаются на исходной переменной. Например:

Function Factorial (ByVal MyVar As Integer) ' Function declaration. 
 MyVar = MyVar - 1 
 If MyVar = 0 Then 
 Factorial = 1 
 Exit Function 
 End If 
 Factorial = Factorial(MyVar) * (MyVar + 1) 
End Function 
 
' Call Factorial with a variable S. 
S = 5 
Print Factorial(S) ' Displays 120 (the factorial of 5) 
Print S ' Displays 5. 

Если в объявление функции не включено ключевое слово ByVal, предшествующий оператор Print отобразит значения 1 и 0. Это связано с тем, что MyVar затем будет ссылаться на переменную S, которая уменьшается на 1, пока не будет равно 0.

Так как ByVal создает копию аргумента, он позволяет передать вариант функции Factorial . Если процедура, в которой объявляется аргумент, имеет другой тип данных, передать вариант по ссылке нельзя.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.