Эффективная передача аргументов
Все аргументы передаются в процедурыпо ссылке, если иное не указано явно. Передача аргументов по ссылке позволяет повысить эффективность, поскольку в этом случае для передачи аргумента в процедуру требуется одинаковое количество времени и памяти (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 N.
Sub Test()
N = 5
Debug.Print Factorial(N) ' Displays 120 (the factorial of 5)
Debug.Print N ' Displays 5.
End Sub
Если в объявление функции не включено ключевое слово ByVal, предшествующий оператор Print отобразит значения 1 и 0. Это связано с тем, что MyVar
будет ссылаться на переменную S
, которая уменьшается на 1, пока не будет равно 0.
Так как ByVal создает копию аргумента, он позволяет передать вариант функции Factorial . Если процедура, в которой объявляется аргумент, имеет другой тип данных, передать вариант по ссылке нельзя.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.