Подпрограмма типа Sub
При описании процедуры, как и при описании функции, ей дается уникальное название – имя процедуры и устанавливается список параметров. Параметры разделяются между собой запятой и содержат описание типов.
Общий вид описания процедуры:
Sub название_процедуры ([параметры])
операторы_процедуры
End Sub
Здесь:
o название_процедуры – имя создаваемой вами процедуры Sub;
o параметры – необязательный список формальных параметров, используемых в процедуре Sub;
o операторы_процедуры – блок операторов, который выполняет работу процедуры.
Вызов процедуры типа Sub
Чтобы вызвать в программе процедуру, нужно указать имя этой процедуры, а затем список фактических параметров, требуемых для этой процедуры.
Общий вид вызова процедуры:
Имя_переменной = название_функции(фактические параметры)
Если в процедуру не передается ни одного аргумента, то требуется наличие пустых круглых скобок.
Передача параметров
При описании процедуры после имени в круглых скобках указывается список параметров с указанием их типов. Эти параметры называются формальными. Они определяют место подстановки фактических параметров.
При вызове процедуры или функции в списке указываются фактические параметры, значения которых должны быть заранее определены.
Параметры можно передавать по значению и по ссылке.
В чем различие?
Каждая переменная имеет значение и уникальный адрес, соответствующий положению переменной в оперативной памяти компьютера.
Языки программирования позволяют передавать в процедуру как значение переменной (передача по значению), так и ее адрес в оперативной памяти (передача по ссылке).
При передаче по значению в процедуру передается только копия переменной, т.е. процедура не получает доступ к переменной в памяти и не может изменить ее значение. Для передачи параметров по значению в описании процедуры перед параметром в списке параметров указывают ключевое слово ByVal (от англ. by value – по значению).
При передаче переменной по ссылке процедуре передается ссылка на ее адрес в оперативной памяти, таким образом, процедура получает доступ к переменной в памяти и может ее изменить. Чтобы передавать переменную по ссылке, необходимо в описании процедуры перед соответствующим параметром в списке добавить ключевое слово ByRef (от англ. by reference – по ссылке).
При вызове процедур ключевые слова, определяющие способ передачи параметров и тип параметров, не указываются.
Проект «Передача по ссылке и по значению»
Задание. Создать проект, в котором описывается процедура, один параметр которой передается по ссылке, а другой – по значению. Значения параметров внутри процедуры изменяются. В вызывающей процедуре переменным присваиваются начальные значения, производится вызов процедуры с указанием переменных в качестве фактических параметров. После выполнения процедуры значения переменных выводятся на надписи.
1. Разместить на форме:
o текстовые поля TextBox1 и TextBox2 для вывода начальных значений переменных;
o надписи Label1 и Label2 для вывода конечного значения переменных;
o кнопку button1 для создания процедуры-обработчика события;
o четыре надписи для вывода поясняющих текстов. 
В программном коде процедуры первый параметр X передается по ссылке, а второй параметр Y передается по значению.
Создадим программный код проекта, в котором:
o объявим переменные;
o создадим процедуру, умножающую значение переменных, передаваемых по ссылке и по значению, на коэффициент 5;
o создадим обработчик, реализующих присваивание переменным начальных значений, вызов первой процедуры и осуществляющий вывод ключевых значений переменных на надписи.
2. Объявить переменные и создать код вызываемой процедуры:
Dim RefA, ValB As Byte
Sub refVal(ByRef RefA, ByVal ValB)
RefA = RefA * 5
ValB = ValB * 5
End Sub
3. Создать код вызывающей процедуры-обработчика события:
Private Sub Button1_Click(ByVal sender As System.Object,
_ByVal e As System.EventArgs) Handles Button1.Click
RefA = Val(TextBox1.Text)
ValB = Val(TextBox2.Text)
refVal(RefA, ValB)
Label1.Text = Str(RefA)
Label2.Text = Str(ValB)
End Sub
4. Запустить проект на выполнение и вывести в текстовые поля начальные значения переменных (например, 3). На надписи будут выведены конечные значения переменной, передаваемое по ссылке (в данном случае, 15), и переменной, передаваемой по значению (в данном случае 3).
Значение переменной, передаваемое по значению, не изменилось.Что и требовалось доказать!






