При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено какое-нибудь новое значение, которое сохранится в переменной и после возврата из процедуры.
Таким образом, по умолчанию при передаче переменных в качестве параметров в процедуру передается физический адрес переменных. Поэтому внутри процедуры может быть модифицировано их содержимое. Такой способ передачи переменных называется передача по ссылке, т.е. в процедуру передается адрес переменной. Другим способом передачи переменных является передача по значению. При этом в процедуре передается не сама переменная, а ее копия. В результате в процедуру попадает только значение переменной. Передача по значению осуществляется с помощью ключевого слова ByVal. Таким образом, при передаче параметров по значению переменные, передаваемые в процедуру или функцию, не могут быть изменены внутри процедуры, так как там происходят вычисления с их копиями. Чтобы явно указывать, как передаются параметры процедуры, можно использовать ключевые слова ByRef - по ссылке и ByVal - по значению.
В языке 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