- •Основы и принципы работы в vba
- •Часть 2 омск 2008
- •Часть 2
- •5.1. Теоретические сведения
- •5.2. Индивидуальные задания
- •6.1. Теоретические сведения
- •6.2. Индивидуальные задания
- •Циклы накопления суммы и произведения.
- •7.1. Теоретические сведения
- •7.2. Индивидуальные задания
- •Создание и использование процедур
- •8.1. Теоретические сведения
- •8.1.1. Создание процедур-функций типа Function
- •8.1.2. Создание процедуры-подпрограммы Sub
- •8.2. Индивидуальные задания
- •Часть 2
- •644046, Г. Омск, пр. Маркса, 35
8.1.2. Создание процедуры-подпрограммы Sub
Синтаксис процедуры-подпрограммы Sub:
Sub Имя_процедуры ([аргументы])
операторы процедуры
End Sub
При вызове процедуры количество и тип аргументов, передаваемых в процедуру Sub, должны соответствовать количеству и типу аргументов, указанных в объявлении процедуры. Если переданные в процедуру Sub значения переменных будут изменены в ходе выполнения процедуры, то измененные значения возвращаются в программу. По умолчании процедуры типа Sub, объявленные в стандартном модуле, являются общедоступными, поэтому они могут быть вызваны из любой процедуры.
Для того чтобы вызвать процедуру типа Sub, необходимо использовать оператор, представляющий собой имя вызываемой процедуры, указав список требуемых аргументов. Передача переменной процедуре Sub называется передачей аргумента по ссылке (по умолчании), поскольку переменная может быть модифицирована в ходе выполнения процедуры и уже измененной возвращена в программу.
Любую переменную можно передать по значению, если для этого в списке аргументов при объявлении процедуры использовать ключевое слово ByVal. Применение ключевого слова ByVal перед описанием переменной позволяет сохранить копию оригинала аргумента и вернуть ее неизменной по окончании процедуры, даже если переменная была модифицирована в ходе выполнения процедуры.
Такое объявление аргументов в процедуре обеспечивает большую гибкость в программировании, так как переданную с параметром ByVal переменную можно модифицировать в процедуре, а в программе она останется неизменной.
Параметры, передающиеся по ссылке, – это параметры, значения которых вычисляются в подпрограмме и передаются из нее в другие подпрограммы. Перед таким параметром ставится ключевое слово ByRef.
П р и м е р 2. Вычислить: ,
где s1 и k1 – сумма и количество нечетных чисел в диапазоне от 10 до 79;
s2 и k2 – сумма и количество нечетных чисел в диапазоне от –5 до –38.
Программный код
Основная подпрограмма: |
|
Option Explicit |
|
Sub PR2() |
|
Dim s1 As Single, s2 As Single, k1 As Single, k2 As Single Dim s As Single, n As Integer, m As Integer, k As Integer Dim f As Single, l As Integer | |
n = Val(InputBox(“n=”)) |
‘Начало диапазона |
m = Val(InputBox(«m=»)) |
‘Конец диапазона |
l = Val(InputBox(«l=»)) |
‘Шаг изменения |
Call pg (n, m, l, s, k) |
‘Обращение к подпрограмме с входными фактическими параметрами: n – начало диапазона, m – конец диапазона, l – шаг изменения; параметры, передаваемые из подпрограммы pg: s – сумма нечетных чисел в диапазоне, k – количество нечетных чисел в диапазоне. |
s1 = s: k1 = k |
‘Сохранение результатов работы подпрограммы pg (значений s и k) |
n = – 5: m = – 38: l = –1 |
‘Ввод шага и нового диапазона. |
Call pg (n, m, l, s, k) |
‘Обращение к подпрограмме с новыми данными. |
s2 = s: k2 = k |
‘Сохранение результатов работы подпрог-раммы pg(значений s и k). |
f = s1 * s2 / (k2 – k1) + 35.6 |
‘Расчет окончательного значения. |
MsgBox (“f=” & f) |
|
End Sub |
|
Вызываемая подпрограмма: |
|
Sub pg (ByVal n1 As Integer, ByVal m1 As Integer, ByVal l1 As Integer, ByRef ss As Single, ByRef kk As Integer) ‘n1, m1, l1 – формальные парамет- ры, передающиеся по значению; ss, kk – параметры, передающиеся по ссылке | |
Dim I As Integer ss = 0 : kk = 0 For I = n1 To m1 Step l1 If I Mod 2 <> 0 Then ss = ss + I: kk = kk + 1 Next i End Sub |