Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Посмотрите внимательнее на программный код процедуры ДеФункция. После объявления переменной z процедура вычисляет значение этой переменной, равное сумме двух аргументов х и у. В следующей строке, чтобы вычислить возвращаемое значение самой процедуры, аргумент х возводится в степень z. Как видите, к, у и z играют одинаковые роли. Если хотите, можно возвести z в степень х.

Полезные аргументы

Но если аргументы так похожи на обычные переменные, зачем же вообще их использовать? В действительности их можно и не использовать - все, что делают аргументы,

можно сделать с помощью обычных переменных. Но аргументы упрощают использование процедур и восприятие программного кода.

Пришло время рассмотреть пару примеров для сравнения. Сначала рассмотрим процедуры, использующие аргументы Модель и ГодВылуска для передачи значений:

Public Sub ВызывающаяПроцедура

ДоходОтСтаройМашины = ПродажаСтаройМашины[Rambler _

Classic,1962)

End Sub

Public Function ПродажаСтаройМашины(Модель As String, _

ГодВыпуска As Integer)

Dim ВозрастнойФактор As Integer

Dim ЦеновойФактор As Single

ВозрастнойФактор = ГодВыпуска - 1900

If Модель = Rambler Classic Then

ЦеновойФактор = .001

Else If Модель = Dodge Dart Then

ЦеновойФактор = .005

Else If ...

(другие операторы)

End If

ПродажаСтаройМашины = ВозрастнойФактор * _

ЦеновойФактор * 1000

End Function

Здесь процедура с именем ВызывающаяПроцедура использует процедуру типа Function с именем ПродажаСтаройМашины для вычисления результата с именем

ДоходСтСтаройМашины. Раз процедура типа Function использует аргументы, вы можете сообщить ей непосредственно, какую машину вы продаете и какого она года выпуска.

Теперь рассмотрим две процедуры, выполняющие ту же работу без аргументов. Заметим, что в данном случае необходимо объявить две переменные на уровне модуля, вне процедур, чтобы этими переменными могли пользоваться обе процедуры.

Dim Модель As String

Dim ГодВыпуска As Integer

Public Sub ВызывающаяПроцедура2

Модель = Dodge Dart

ГодВыпуска = 1963

ДоходОтСтаройМашины = ПродажаСтаройМашины2

End Sub

Public function ПродажаСтаройМашины 2

Dim ВозрастнойФактор As Integer

Dim ЦеновойФактор As Single

If Модель = Rambler Classic Then

ЦеновойФактор = .001

Else If Модель = Dodge Dart Then

ЦеновойФактор = .005

Else If ...

(другие операторы)

End If

ПродажаСтаройМашины = ВозрастнойФактор * _

ЦеновойФактор * 1000

End Function

Так зачем же возражать?

Пока эти примеры не улетучились из вашей головы, я приведу список преимуществ, которые дает использование аргументов для обмена информацией между процедурами.

* При чтении программного кода процедуры именно аргументы ясно указывают, какие значения требуются процедуре от других частей программы для выполнения работы.

* При создании программного кода аргументы помогают уменьшить число переменных, которые требуется создать (вне всех процедур в разделе объявлений

модуля).

Одной очевидной проблемой переменных уровня модуля является то, что при создании использующей их процедуры не видно определений таких переменных.

* При вызове процедуры с аргументами VBA заставляет вас определить значения для таких аргументов. Это гарантирует, что процедура получит именно те значения, которых ей требуются.

Создание процедур с аргументами

Чтобы создать процедуру с аргументами, поместите аргументы в скобки после имени процедуры в ее объявлении. Например:

Романист(Заглавие As String, Страницы Аз Integer, _

СрокЗавершения As Date)

Отсюда видно, что тип каждого из аргументов задается следующим за именем аргумента сочетанием As тип, где тип может быть любым допустимым в VBA типом данных или классом объекта. Если указать только имя аргумента и не указать тип, то VBA припишет такому аргументу тип Variant. (Да знаю я, знаю, что еще не обсуждал типы данных и классы объектов, но вы можете найти все о них в главах 7 и 12 соответственно.)

Вызов процедур с аргументами

Чтобы где-нибудь в программном коде вызвать процедуру с аргументами, просто сразу за именем этой процедуры напечатайте значения каждого из аргументов. Значения должны быть перечислены в том же порядке, в котором соответствующие аргументы заданы в объявлении процедуры.

Единственной возможной сложностью при этом могут стать правила использования или неиспользования скобок. Правила эти следующие.

Скобки для аргументов обязательны при вызове процедуры типа Function для получения возвращаемого значения.

Скобки можно опустить в случае вызова процедуры типа Sub, а также в случае, когда в программном коде, вызывающем процедуру типа Function, возвращаемое значение не используется.

Организация процедур

Любую VBA-программу, независимо от ее длины, можно оформить в виде одной единственной процедуры. Так зачем же создавать себе лишние заботы, разбивая программу на процедуры? Главная причина в том, что это существенно упрощает контроль над выполняемой работой по программированию.

С ростом объема программы еще быстрее растет вероятность того, что вы что-нибудь в ней упустите. Если программа разделена на процедуры, имена которых соответствуют выполняемым процедурами задачам, вы получаете возможность сконцентрироваться на той части программы, которая нужна вам в данный момент. Не забывайте, что в окне программного кода справа вверху имеется список, из которого можно выбрать имя процедуры и сразу перейти к этой процедуре, где бы внутри модуля она ни находилась.

Еще одним подтверждением пользы оформления блоков программного кода в виде процедур служит возможность при этом устранить повторный ввод одних и тех же блоков. Например, если в разных местах программы используется одна и та же последовательность операторов, то можно упростить программу и уменьшить ее размеры, поместив повторно используемые операторы в процедуру. Такую процедуру можно будет вызывать по имени из любой части программы.

Поделиться:
Популярные книги

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2

Император поневоле

Распопов Дмитрий Викторович
6. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Император поневоле

Лорд Системы 7

Токсик Саша
7. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 7

Целитель. Книга вторая

Первухин Андрей Евгеньевич
2. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель. Книга вторая

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Хочу тебя навсегда

Джокер Ольга
2. Люби меня
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Хочу тебя навсегда

СД. Том 15

Клеванский Кирилл Сергеевич
15. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.14
рейтинг книги
СД. Том 15

Смерть может танцевать 3

Вальтер Макс
3. Безликий
Фантастика:
боевая фантастика
5.40
рейтинг книги
Смерть может танцевать 3