VBA для «чайников» (Каммингс) - страница 87

Здесь я вынужден сделать паузу, чтобы обратить ваше внимание на то, что 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


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

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