3. Определение
ПроцедураПроцедура — это последователь-
ность операторов VBA,
расположенная в модуле VBA.
Модуль может включать любое
количество процедур.
ВыходВыход
4. Формат :
[Private | Public] [Static]
Sub имя
([список_аргументов])
[инструкции]
[Exit Sub]
[инструкции]
End Sub
ВыходВыход
5. • PrivatePrivate — указывает на то, что процедура
доступна только для других процедур в том же
модуле.
• PublicPublic — указывает на то, что процедура
доступна для всех остальных процедур во всех
модулях рабочей книги.
• StaticStatic — указывает на то, что переменные
процедуры сохраняются после окончания
процедуры.
ВыходВыход
6. продолжение
• SubSub— обозначает начало процедуры.
• имяимя — любое корректное название процедуры.
• список_аргументовсписок_аргументов — список переменных,
которые передаются в процедуру. Для
разделения используется запятая. Если
аргументов нет, то указываются пустые скобки.
• инструкцииинструкции — корректные инструкции VBA.
• Exit SubExit Sub — вызывает немедленный выход из
процедуры до ее формального завершения.
• End SubEnd Sub — указывает на окончание
процедуры.
ВыходВыход
7. Вызов процедуры из другой процедуры
Существует два оператора обращения к
подпрограмме:
Call название
(фактические_параметры)
название фактические_параметры
ВыходВыход
8. Например
Sub MySub()
MonthNum = InputBox("Введите номер
месяца")
Call UpdateSheet(MonthNum)
...[код]...
End Sub
Sub UpdateSheet(MonthSeq)
...[код]...
End Sub
ВыходВыход
9. Вызов процедуры из другого модуля
В одном модуле не может быть двух
процедур с одинаковыми именами. Но в
разных модулях можно давать одинаковые
имена. Тогда для вызова такой процедуры
перед названием записывают название
модуля где она находится и точку.
ВыходВыход
10. Предположим, вы создали процедуры с
названием MySub в двух модулях: Module1 и
Module2. Если требуется, чтобы процедура
MySub в Module2 вызывала MySub из
Module1, то используется один из
следующих операторов:
Module1.MySub
Call Module1.MySub
ВыходВыход
11. Передача аргументов в процедуры
АргументыАргументы обеспечивают процедуру
данными, использующимися в ее
инструкциях.
Аргумент может передавать
следующие данные:
• переменная;
• константа;
• массив;
• объект.
ВыходВыход
12. Передача аргументов
Существует два способа передачи
аргументов в процедуру: по ссылкессылке и по
значениюзначению.
При передаче аргумента по ссылке
(используется по умолчанию) в процедуру
передается адрес переменной. При
передаче аргумента по значению в
процедуру передается копия переменной.
Следовательно, изменение аргумента в
процедуре не вызывает изменения
исходной переменной.
ВыходВыход
13. Пример
Sub Main()
MyValue = 10
Call Process(MyValue)
MsgBox MyValue
End Sub
Sub Process(YourValue)
YourValue = YourValue * 10
End Sub
ВыходВыход
14. Если необходимо, чтобы вызываемая
процедура не изменяла переменные,
полученные как аргументы, то их
необходимо передавать по значению, а
не по ссылке. Для этого добавляется
перед аргументом ключевое слово
ByValByVal. Тогда вызываемая процедура
будет управлять копией переданных
данных.
ВыходВыход
17. Объявление функции
[Public | Private] [Static]
Function имя
([список_аргументов]) [As
тип]
[инструкции]
[имя = выражение]
[Exit Function]
[инструкции]
[имя = выражение]
End Function
ВыходВыход
18. Функция с аргументом массивом
Function SuinArray(List) As
Double
Dim Item As Variant
SumArray = 0
For Each Item In List
SumArray = SumArray + Item
Next Item
End Function
ВыходВыход
19. Вызов этой функции
Sub MakeList()
Dim Nums(1 To 100) As Double
Dim i as Integer
For i = 1 To 100
Nums(i) = Rnd * 1000
Next i
MsgBox SumArray (Nums)
End Sub
ВыходВыход