Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Все аргументы передаются в процедурыпо ссылке, если иное не указано явно. Передача аргументов по ссылке позволяет повысить эффективность, поскольку в этом случае для передачи аргумента в процедуру требуется одинаковое количество времени и памяти (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 и обратная связь.