HTML, Excel, Word, SEOОсновы VBA ⇒ Понятие функции

Основы VBA

Самоучитель vba: Теория
..Первый макрос в Word
..Этапы записи макроса
..Запись макроса в Word
..Запись макроса в Excel
..Код макроса
..Выполнение макроса
..Типы данных VBA
..Переменные VBA
..Константы VBA
..Совместимость типов данных
..Арифметические операторы
..Логические операторы
..Строковые операторы
..Функции VBA ч.1
..Функции VBA ч.2
..Примеры использования функций
..Функции host-приложений
..Функции-процедуры
..Пользовательские функции в Excel
..Операторы ветвления: простой выбор
..Операторы ветвления: сложный выбор
..Использование MsgBox
..Прерывание процедур и функций
..Необязательные аргументы функций
..Циклы VBA ч.1
..Циклы ч.2
..Циклы ч.3
..Массивы VBA ч.1
..Массивы ч.2
..Массивы ч.3
..Управление файлами с помощью VBA
Самоучитель vba: Практика
Игра: Цепная реакция
Приложения
..Сумматор
..Наклейки
..Восьмерка
..Менеджер почты
Надстройки
..DEF
..SortSheets
..HideSheet



Функции VBA (ч.1). Понятие функции.


Функция - это встроенная формула, выполняющая действия над выражениями и генерирующая какое-то значение, которое VBA вставляет в программу в том месте, где появляется имя этой функции.

Не следует путать термины функция и процедура. Процедура, как правило, выполняет какую-то определенную задачу (задачи). Функция оперирует определенными данными и всегда возвращает некоторое результирующее значение.



В приведенном выше листинге функция CStr преобразует значение другой функции Now (получение системной даты) в строку и результирующее значение присваивается переменной DT. Обратите внимание, что переменная ТМ автоматически преобразуется VBA к строковому типу в операторе вывода текстового сообщения на экран. Подобные "вольности" в программировании доступны далеко не во всех языках, поэтому, не стоит ими злоупотреблять, дабы не выработать вредную привычку в написании "неряшливых" программных кодов.

Вы, наверное, уже обратили внимание, что некоторые функции не требуют аргументов. В вышеприведенном листинге функции Time, Now не требуют никаких аргументов, они просто возвращают текущие системное время и дату. В то же время функция CStr требует наличия аргумента.

Функции, не требующие аргументов, просто вводятся в код программы.

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

Тип данных значения, возвращаемого функцией, зависит от этой конкретной функции. Большинство функций возвращают значения типа Variant, String, Double, Integer. VBA может автоматически преобразовывать результат какой-либо функции в тип данных, совместимый с другими значениями в выражении, содержащем эту функцию. Все правила совместимости типов данных, рассмотренные для констант и переменных, применимы также к значениям, возвращаемым функциям.

Игнорирование результата функции

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

Именно так используется в вышеприведенном листинге функция MsgBox, хотя здесь она используется в качестве процедуры (т.к. не использует возвращаемые значения).

В действительности же, VBA предоставляет несколько встроенных констант для определения кнопок в окне сообщения MsgBox.



Однако, результат выбора пользователя опять никаким образом не возвращается и не используется в дальнейшем коде программы. Исправим этот нюанс.



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

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

В то же время VBA запрещает игнорирование результата функции, имя которой является ключевым словом VBA (например, CStr), и тех функций, единственным назначением которых является предоставление некоторого возвращаемого значения, например, математических.

Именованные аргументы функции

Аргументы функции необходимо перечислять в определенном порядке. Так для функции MsgBox первый аргумент является сообщением для отображения, второй - это число и тип кнопок для диалогового окна, третий - заголовок диалогового окна. Об этом подсказывает всплывающее окно "Краткие сведения", появляющееся при вводе имени функции.



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


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

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



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


Полный синтаксис функции MsgBox следующий:


MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context])


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

Аргумент Title - строка для заголовка диалогового окна.

Аргумент HelpFile - строковое выражение, содержащее имя справочного файла Windows (который уже должен быть создан).

Аргумент Context - численное выражение, указывающее раздел в справочном файле, относящийся к отображаемому диалоговому окну.

Аргумент Buttons - численное выражение, которое задает количество и тип кнопок в диалоговом окне. Также указывает кнопку по умолчанию и, содержит ли это диалоговое окно стандартные значки Windows для предупредительных сообщений и запросов пользователя.


Аргументы-константы функции MsgBox

Константа Назначение
vbAbortRetryIgnore Отображает командные кнопки Стоп, Повтор, Пропустить
vbApplicationModal Для продолжения работы с приложением пользователь должен ответить на запрос диалогового окна.
vbCritical Отображается окно с предупредительным значком критической ошибки.
vbDefaultButton1
vbDefaultButton2
vbDefaultButton3
vbDefaultButton4
Номер командной кнопки в диалоговом окне являющейся кнопкой по умолчанию.
vbExclamation Желтый знак вопроса. Используется для отображения важной информации не требующей ответа.
vbInformation Отображает значок информации. Используется для отображения справочной информации.
vbMsgBoxHelpButton Добавляет к диалоговому окну кнопку Справка. При щелчке на этой кнопке открывается файл, который задан в аргументе HelpFile, в разделе, заданном аргументом Context.
vbOKCancel Отображает кнопки ОК и Отмена.
vbOKOnly Отображает только кнопку ОК - аналогична пропуску аргумента Buttons.
vbQuestion Отображает значок вопроса. Используется когда надо задать пользователю какой-то важный вопрос.
vbRetryCancel Отображает кнопки Повтор и Отмена.
vbSystemModal Диалоговое окно всегда остается впереди других окон пока не будет закрыто.
vbYesNo Отображает кнопки Да и Нет.
vbYesNoCancel Отображает кнопки Да, Нет и Отмена.

Возвращаемые значения-константы функции MsgBox

Константа Назначение
vbAbort Пользователь выбирает кнопку Стоп
vbCancel Пользователь выбирает кнопку Отмена
vbIgnore Пользователь выбирает кнопку Пропустить
vbNo Пользователь выбирает кнопку Нет
vbOK Пользователь выбирает кнопку ОК
vbRetry Пользователь выбирает кнопку Повтор
vbYes Пользователь выбирает кнопку Да

Функция InputBox

InputBox - еще одна довольно часто используемая функция для обмена данными с пользователем.

Полный синтаксис функции InputBox следующий:


InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile, Context])


Аргументы Prompt (единственный обязательный аргумент), Title, HelpFile, Context - аналогичны уже рассмотренным одноименным аргументам функции MsgBox.

Аргумент Default - строковое выражение, использующееся как значение по умолчанию для пользовательского ввода.

Аргументы XPos, YPos - любые численные выражения. Эти аргументы задают координаты вывода диалогового окна на экране монитора. XPos - горизонтальное расстояние от левого края окна. YPos - вертикальное расстояние от верхнего края окна. Оба расстояния измеряются в твипах (1 твип = 1/20 точки = 0,0007 дюйма). Следует быть внимательным при использовании этих аргументов, т.к. при их больших значениях диалоговое окно может "уехать" за пределы экрана монитора.

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



При вызове InputBox можно использовать именованные аргументы.

Нельзя смешивать именованные аргументы с обычным списком аргументов в одном и том же вызове функции.




В начало страницы



В начало страницы