У этой процедуры два аргумента - х и у. Как видно из программного кода, аргументы процедуры являются частью ее объявления. Аргументы размещаются в скобках сразу после имени процедуры в списке аргументов, где для каждого из аргументов задается имя и тип данных (подробности - ниже, в разделе Создание процедур с аргументами).
Если у процедуры есть аргументы, то она будет требовать эти аргументы при выполнении своей работы. Внутри такой процедуры аргументы играют практически ту же роль, что и переменные, объявляемые самым обычным образом.
Посмотрите внимательнее на программный код процедуры ДеФункция. После объявления переменной 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)