Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_lektsii.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
3.91 Mб
Скачать

6. Использование функций в vba

Мы уже говорили, что программы VBA делятся на два вида: подпрограммы и функции. До сих пор в этой главе мы обсуждали подпрограммы, теперь рассмотрим функции.

Функции и подпрограммы имеют всего три основных отличия:

  • функция начинается ключевым словом Function и заканчивается ключевыми словами End Function;

  • функцию можно вызывать из формулы, введенной в ячейку;

  • функция может возвращать значение в вызывающую программу или формулу.

Рассмотрим пример функции Multiply, вычисляющей произведение двух чисел:

Sub ВызовФункции()

Dim Var1 As Integer

Dim Var2 As Integer

Dim Var3 As Integer

Var1 =5

Var2 = 10

Var3 = Multiply(Var1, Var2)

MsgBox Var3

End Sub

Function Multiply(ByVal Var1, ByVal Var2)

Multiply = Var1 * Var2

End Function

Обратите внимание на строку 2 функции Multiply — в ней значение произведения двух чисел присваивается имени функции. Как раз через него вычисленное значение возвращается в вызывающую программу.

ПРИМЕЧАНИЕ. Определять тип аргументов функции и возвращаемого ею значения можно в описании функции, как показано ниже.

Function Multiply (ByVal Var1 As Integer, _

ByVal Var2 As Integer)

Если вы не укажете тип функции и ее аргументов, им будет присвоен тип по умолчанию (Variant).

Вы, вероятно, обратили внимание на любопытную особенность вызова функции Multiply – он указан в правой части оператора присваивания, в левой части которого помещена переменная Var3. При этом список аргументов – Varl и Var2 – заключен в круглые скобки. Эти переменные передаются в функцию Multiply, а возвращаемое ею значение присваивается переменной Var3. Взгляните на предыдущие примеры: при вызове подпрограммы передаваемые в нее аргументы в скобки не заключаются. Запомните основные правила передачи аргументов в подпрограммы и функции.

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

Правило 2. Для вызова функции и подпрограммы вы вправе использовать ключевое слово Call (о нем читайте в справочной системе VBA). В этом случае список аргументов также заключается в круглые скобки.

Правило 3. Если функция вызывается сама по себе – не в составе выражения и без ключевого слова Call, – список аргументов в круглые скобки не заключается.

7. Область видимости переменных, констант, подпрограмм и функций

Любая переменная, константа, подпрограмма или функция VBA обладает областью видимости (scope), в которой возможен доступ к данной переменной, константе, подпрограмме или функции. Допустим, что мы определили переменную Var1 в процедуре Proc1, а затем написали вторую процедуру – Proc2, где также хотим использовать эту переменную. Если Var1 описана внутри Proc1 ключевым словом Dim, она считается переменной «уровня процедуры». Это означает, что область её видимости ограничена подпрограммой или функцией, в которой она объявлена. Использовать Var1 в Proc2 без расширения видимости переменной нельзя.

Рассмотрим другой пример. В модуле Модуль1 содержится функция Функция1. Мы хотим вызвать её из программы, помещенной в другой модуль, например Модуль2. Если Функция1 описана с помощью ключевого слова Function (см. раздел «Функции»), она считается функцией «уровня проекта», т. е. она доступна везде в пределах содержащей её рабочей книги – мы вправе вызывать её из любой программы любого модуля книги. Чтобы предотвратить вызов функции из программ других модулей, достаточно ограничить область её видимости.

А теперь рассмотрим вопросы видимости отдельно для всех уже описанных нами основных элементов VBA – переменных, констант, подпрограмм и функций.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]