Kniga-Online.club

Стив Каммингс - VBA для чайников

Читать бесплатно Стив Каммингс - VBA для чайников. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

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

Процедуры типа Sub

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

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

Public Sub ПриятнаяПроцедура()

Dim ДоброеСообщение As String

ДоброеСообщение = !

MsgBox ДоброеСообщение

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

End Sub

Первая строка, объявление процедуры типа Sub, решает две жизненно важные задачи.

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

Каждая процедура типа Sub должна заканчиваться оператором End Sub, который дает VBA знать, где следует прекратить выполнение программного кода.

Элементы объявления процедуры типа Sub

В операторе объявления процедуры первый термин Public определяет область видимости процедуры. Для области видимости можно указать либо Public, либо Private. При этом Public подразумевается по умолчанию, так что это ключевое слово можно пропустить. Логично, что пропуск ключевого слова Public делает область видимости такой, которой вообще не нужно интересоваться. Снова повторю, что подробно область видимости описана в разделе Обзор области видимости.

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

Пропущенные аргументы

Завершается объявление парой скобок. Зачем они нужны, если внутри них ничего нет?

Эти скобки могли бы содержать аргументы, если бы у процедуры они были. Аргументы - это элементы данных, которые процедура намеревается получить при вызове. В данном случае процедура не имеет аргументов, поэтому она не только внешне такая приятная, но и в скобках ничего не содержит. Дальнейшее обсуждение аргументов продолжится позже в разделе Привлекательные аргументы'.

Снова повторю, что макрос в VBA по определению представляет собой процедуру типа

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

Вызов процедур типа Sub

Любую процедуру - независимо от того, имеет она аргументы или нет - можно выполнить, или вызвать, из другой процедуры. Чтобы вызвать процедуру типа Sub, используйте оператор, представляющий собой имя вызываемой процедуры, как в следующем фрагменте программного кода. Строка, в которой напечатано МойкаМоейСтаройМашины, вызывает процедуру типа Sub:

* * *

МояСтараяМашина = Доблесная

МойкаМоейСтаройМашины

ЧислоПосященийМойки = ЧислоПосященийМойки +1

* * *

Процедуры типа Function

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

Вот пример процедуры типа Function:

Public Function ДеФункция(х As Integer, y As Integer )

Dim Z AS Integer

z = x + у

ДеФункция = x ́ z

End Function

Очевидно, строение процедуры типа Function очень похоже на строение процедуры типа Sub. Объявление начинается с необязательного ключевою слова, определяющего область видимости процедуры (в данном случае это Public). Далее идет ключевое слово Function, определяющее тип процедуры, за ним размещается имя процедуры и, наконец, ее аргументы. Аргументы будут обсуждаться в разделе Привлекательные аргументы, но уже на этом примере вы видите, как они используются. Подобно процедуре типа Sub, в конце процедуры типа Function находится завершающий оператор End Function.

Здесь я вынужден сделать паузу, чтобы обратить ваше внимание на то, что VBA содержит немалое количество встроенных функций. Подобно процедурам типа Function, функции VBA возвращают в вызывающую процедуру некоторое значение. Вызываются функции и процедуры типа Function тоже одинаково.

Единственным различием между функциями и процедурами типа Function является то, что для функций вам не нужно печатать программный код! Обзор функций, доступных в VBA, вы найдете в главе 11.

Отличия процедур типа Function от процедур типа Sub

Между процедурами типа Function и типа Sub есть одно существенное отличие: в процедуре типа Function обязательно где-то должен присутствовать по крайней мере один оператор, задающий значение этой функции. При этом используется имя процедуры, как будто это обычная переменная. В предыдущем примере присвоение значения осуществляется в строке ДеФункция = х ́ z. После того как программный код в этой строке будет выполнен, ДеФункция будет содержать значение, которое возвратится в вызывающую процедуру для дальнейшего использования там.

Вызов процедур типа Function

Процедуру типа Function можно выполнить, только вызвав ее из другой процедуры.

Как правило, это делается путем присваивания имени данной функции некоторой переменной. В следующем примере переменная ZСтепень получает значение, возвращенное процедурой ДеЗункция:

ZСтепень = ДеФункция(3, 4)

После выполнения этого оператора переменная ZCTeneHb будет содержать значение, вычисленное процедурой ДеФункция, - процедурой типа Function - и этим значением будет 3 . Обратите внимание, что в данном случае процедуре передаются аргументы, заключенные в скобки после имени процедуры.

Привлекательные аргументы

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

Рассмотрим снова процедуру ДеФункция:

Public Function ДеФункция(х As Integer, y As Integer )

Dim Z AS Integer

z = x + у

ДеФункция = x ́ z

End Function

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

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

Посмотрите внимательнее на программный код процедуры ДеФункция. После объявления переменной 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 с именем ПродажаСтаройМашины для вычисления результата с именем

Перейти на страницу:

Стив Каммингс читать все книги автора по порядку

Стив Каммингс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге VBA для чайников, автор: Стив Каммингс. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*