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

на главную - закладки

Жанры

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

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

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

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

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки

Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Корнев Павел Николаевич
Фантастика:
фэнтези
героическая фантастика
5.50
рейтинг книги
Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Жизнь под чужим солнцем

Михалкова Елена Ивановна
Детективы:
прочие детективы
9.10
рейтинг книги
Жизнь под чужим солнцем

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец