Dim a As Single, x As Single, y As Single
Dim n As Integer, k As Integer
a = 3.7
n = 2: k = 2: m = 2
For x = −0.5 To 12.5 Step 0.5
If x < 4 Then
y = Exp(a - x): Cells(n, 1) = x: Cells(n, 2) = y : n = n + 1
Else
If x <= 8 Then
y = Tan(a * x): Cells(k, 3) = x: Cells(k, 4) = y: k = k + 1
Else
y = 8 * Cos(x): Cells(m, 5) = x: Cells(m, 6) = y: m = m + 1
End If
End If
Next x
End Sub
Цикл со счетчиком
Пример 8 Последовательно вводятся пары координат точек x, y. Всего M пар. Определить, сколько из этих точек находится в третьем квадранте.
Вводится переменнаяk-счетчик точек, попавших в третий квадрант.
Блок 2 – задаем начальное значение счетчика
Блок 4 – ввод координат текущей точки.
Блок 7 – наращивание значения счетчика.
Блок 8 – переход к следующей порции данных.
Sub Цикл_со_счет ()
Dim x As Single, y As Single, k As Integer, M As Integer
M = Val (InputBox ("ввод M"))
k = 0
For i = 1 To M
x = Val (InputBox ("ввод x"))
y = Val (InputBox ("ввод y"))
If x < 0 And y < 0 Then
k = k + 1
End If
Next i
MsgBox "k= " & k
EndSub
Процедуры и функции
Все рассмотренные ранее VBA- программы представляли собой единственную изолированную процедуру.
Реальные программы (приложения) имеют модульную структуру, то есть состоят из набора относительно небольших процедур, каждая из которых выполняет свою подзадачу.
Процедуры могут вызывать друг друга, передавать при этом аргументы (параметры), то есть обмениваться информацией.
Процедуры типа Function (функция)
Процедуру Function можно выполнить, только путем вызова ее из другой процедуры. Function представляет собой набор команд, результатом выполнения которых является значение. Возвращается это значение в вызывающую процедуру путем его присваивания имени функции (через имя функции).
Function может использоваться в правой части выражений, точно также как другие встроенные функции (cos, exp).
Пример 9 VBA –программа, вычисляющая периметр прямоугольного треугольника по заданным его катетам и выводящая результат в диалоговое окно сообщений.
Sub Головная ()
DimZAsSingle
|
MsgBox "Периметр = " & Z
End Sub
|
Периметр = x + y + гипотенуза (x, y) ' вызовфункции
' гипотенуза (x, y)
End Function
|
|
гипотенуза = Sqr (x ^ 2 + y ^ 2)
End Function
В строке процедура Головная вызывает функцию Периметр (13,7).
В строке −объявление функции Периметр. В скобках указаны параметры функции, значения которых она будет требовать при ее вызове. За скобками указан тип функции, который определяется типом возвращаемого ею значения.
В строке −объявление функции гипотенуза.
В строке результат выполнения функции − значение присваивается имени функции и через него возвращается в вызывающую процедуру
Процедуры типа Sub (подпрограммы)
могут возвращать значения через параметры.. Процедуры без параметров не возвращают значения; они относятся к категории макросов.
Пример 10.
Вычислить значение , при а = 0,98; b = 1,7
Sub Головная ()
Dim a As Single, b As Single, D As Single
Dim S As Single, S1 As Single, S2 As Single
|
Call Sum (a, S) ' вызов подпрограммы Sum
|
|
|
S2 = S
D = S1 / S2
MsgBox "D=" & D
End Sub
|
|
SS = 0
For i = 1 To 8
SS = SS + c ^ i
Next i
|
End Sub
В строке фактический параметр aпередается в подпрограмму; через параметр S результат подпрограммы возвращается в головную процедуру
В строке результат работы подпрограммы Sприсваивается переменной S1.
В строке фактический параметр bпередается в подпрограмму; через параметр S результат подпрограммы возвращается в головную процедуру
В строке результат работы подпрограммы S присваивается переменной S2.
В строке объявление подпрограммыSum.
В строке объявление локальной переменной SS.
В строке результат подпрограммы SS присваивается параметру S.
Передача параметра в подпрограмму может осуществляться различными способами.
1. По ссылке. При этомв подпрограмму передается физический адресячейки памяти, где хранится переменная. Подпрограмма получает доступ к этой ячейке. Следовательно, любое изменение параметра в процедуре приведет к изменению значения переменной в памяти.
Передача параметров по ссылке реализуется в VBA по – умолчанию (как в данном примере) .
Для явного указания передачи параметра по ссылке используют ключевое слово ByRef.
2. По значению. В подпрограмму передается не сама переменная, а ее копия в виде значения. При этом изменение параметра в подпрограмме не влияет на исходное значение переменной в памяти.
Для явного указания передачи параметра по значению используют ключевое слово ByVal.
3. Явная передача значения. В этом случае строка запишется так:
Call Sum ( 0.98, S)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.