Вопрос № 22. Процедуры и функции языка VBA. Параметры. Передача параметров в процедуры и функции по адресу и значению. Использование атрибутов: ByVal и ByRef. Привести примеры.
При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено какое-нибудь новое значение, которое сохранится в переменной и после возврата из процедуры.
Таким образом, по умолчанию при передаче переменных в качестве параметров в процедуру передается физический адрес переменных. Поэтому внутри процедуры может быть модифицировано их содержимое. Такой способ передачи переменных называется передача по ссылке, т.е. в процедуру передается  адрес  переменной.   Другим   способом передачи переменных является передача по значению. При этом в процедуре передается не сама переменная, а ее копия. В результате в процедуру попадает только значение переменной. Передача по значению осуществляется с помощью ключевого слова ByVal. Таким   образом,   при   передаче   параметров   по значению переменные, передаваемые в процедуру или функцию, не могут быть изменены внутри процедуры, так как там происходят вычисления с их копиями. Чтобы явно указывать, как передаются параметры процедуры, можно использовать ключевые слова ByRef -  по ссылке и ByVal - по значению.
Подпрограммы. В языке VBA подпрограммы делятся на два вида: подпрограммы-функции и подпрограммы—процедуры, которые   подразделяются   на   две   группы:   встроенные и определяемые пользователем.
При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено какое-нибудь новое значение, которое сохранится в переменной и после возврата из процедуры.
Подпрограммы. В языке VBA подпрограммы делятся на два вида: подпрограммы-функции и подпрограммы—процедуры, которые подразделяются на две группы: встроенные и определяемые пользователем.
Функции Многократно повторяющуюся часть программы можно оформить подпрограммой - функцией.
Общий вид функции пользователя:
Function Имя_Функции(список формальных параметров) As Тип описания функции
Раздел операторов
End Function
Вызов функции. Общий вид вызова функции:
переменная = Имя Функции (фактические параметры)
Подпрограммы — процедуры. Кроме функций пользователя, на листе модуля можно записывать процедуры. Процедура, как и функция, состоит из двух частей: описания и вызова функции.
Описание процедуры. Синтаксическая структура описания имеет следующий вид:
Sub Имя_Процедуры (список формальных параметров)
Тело процедуры
End Sub
Процедура начинается с заголовка процедуры Sub
Вызов процедуры.
Имя_Процедуры_Список фактических параметров
Список фактических параметров от имени_Процедуры записывается через пробел, и отделяются друг от друга запятой, в круглые скобки не заключаются. В отличие от функций пользователя, процедуры нельзя вызывть из ячеек рабочего листа.
Функция передаёт в главную программу при её вызове только одно значение, а процедура может передавать одно или несколько значений при её вызове.
Option Explicit
Dim x As Integer, y As Integer, p As Integer
Function F(x As Integer) As Single
F = 4*x / (3-2*2)
End Function
Sub My_pr()
Cells(1,1) = “ТАБЛИЦА”
Cells(2,1) = “x”
Cells(2,1) = ”y”
p = 3
For x = 0 To 12
If 3 – 2*x = 0 Then GoTo M
y = F(x)
Cells(p, 1) = x
Cells(p, 2) = y
p = p + 1
M: Next x
End Sub