Функции

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

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

Синтаксис:

Function Name([Arglist]) [As Type]

'VBA Statements

[Name = expression]

End Function

Function - ключевое слово, объявляющее начало функции.

Name - имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.

Arglist - список аргументов данной функции, необязательный элемент.

Type - любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип Variant.

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

End Function - ключевые слова, заканчивающие функцию.

Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.

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

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

23. В языке программирования VBA определено довольно много встроенных функций. Они доступны в любой программе на языке VBA, при этом безразлично, в среде какого программного продукта мы находимся — Excel, Word, Access или, к примеру, AutoCAD. Используются они очень активно, и во многих ситуациях без них не обойтись.

Чтобы вывести список функций VBA, введите в окне кода символы VBA. (с точкой в конце!). В результате этого редактор Visual Basic выведет подсказку - раскрывающийся список, содержащий все встроенные функции VBA. Кроме функций, в списке выводятся имена всех встроенных констант. Каждая

функция VBA подробно описана в справочной системе. Для просмотра справки по интересующей вас функции установите курсор на ее имени и нажмите клавишу <F1>.

Большие функциональные возможности предоставляет использование VBA совместно с функциями рабочих листов Excel. В коде VBA можно применять многие из встроенных функций рабочих листов, но есть особенность: в коде VBA нельзя применить функцию рабочего листа, для которой есть эквивалентная функция VBA. Например, в коде VBA нельзя вызвать функцию рабочего листа КОРЕНЬ (В оригинальной версии — SQRT), потому что в VBA есть своя версия этой функции — Sqr, причем в коде VBA русифицированной версии Excel используются не русские, а исходные (английские) имена функций рабочего листа. Например, функция МЕДИАНА В коде VBA должна быть записана как Median.

24. В программах на VBA очень часто приходится преобразовывать значения из одного типа данных в другой. Приведу несколько типичных ситуаций, когда этим приходится заниматься:

· преобразование из строкового значения в числовое при приеме значения от пользователя через InputBox();

· преобразование значения даты/времени в строковое, когда нам нужно отобразить дату или время единообразно вне зависимости от региональных настроек на компьютерах пользователей;

· преобразование значения из строкового в дату/время для применения специальных функций даты/времени.

 

Чаще всего для конвертации типов данных используются функции, имя которых складывается из префикса 'C' (от слова Convert) и имени типа данных. Перечень этих функций следующий: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr()

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

· Str() — позволяет перевести числовое значение в строковое. Делает почти то же самое, что и CStr(), но при этом вставляет пробел перед положительными числами.

· Val() — "вытаскивает" из смеси цифр и букв только числовое значение. При этом функция читает данные слева направо и останавливается на первом нечисловом значении (допускается единственное нечисловое значение — точка, которая будет отделять целую часть от дробной). Очень удобно, когда у нас вперемежку с числовыми данными прописываются единицы измерения или валюта.

· IsNumeric() и IsDate() — проверяют значения на соответствие, чтобы не возникло ошибок при конвертации. Для проверки на соответствие специальным значениям можно использовать функции IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() и IsObject(). Все эти функции возвращают True или False в зависимости от результатов проверки переданного им значения.

· Hex() и Oct() — преобразовывают десятичные данные в строковое представление шестнадцатеричных и восьмеричных значений.

25. Самой простой способ вывести информацию пользователю— воспользоваться встроенной функцией VBA MsgBox().Полный ее синтаксис выглядит так:

MsgBox(Текст[,кнопки] [,заголовок окна] [, файл справки, метка в файле справки])

Возможностей у MsgBox() достаточно много:

• можно отображать разное кол-во кнопок (OK, Cancel, Abort, Retry, Ignore, Yes, No),

• можно показывать символы Critical, Warning, Question, Information,

• можно выбирать кнопку по умолчанию,

• можно делать окно модальным или обычным.

В зависимости от того, на какую пользователь кнопку нажал, такое значение возвращается приложению (всего 7 вариантов).

Самый простой способ принять информацию от пользователя— воспользоваться функцией InputBox().

Для InputBox() можно указать текст приглашения, заголовок окна, значение по умолчанию, местонахождение окна и файл справки. Не забывайте, что все вводимое пользователем InputBox() автоматически переводит в тип данных String— может потребоваться выполнить преобразование.

Можно привлечь внимание пользователем звуковым сигналом. Для этой цели используется оператор Beep

26. Элементы управления VBA, добавление элементов управления на форму. Форма

Элементы управления — это специализированные объекты, которые можно размещать на формах VBA (и непосредственно в документах), используемые для организации взаимодействия с пользователем. В VBA вы можете использовать как стандартные элементы управления (CommandButton, CheckBox, OptionButton), так и нестандартные (любые другие, которые есть на вашем компьютере, например, Internet Explorer, Calendar и т.п.) Элементы управления реагируют на события, которые генерирует пользователь (нажатие на кнопку, ввод значения, перемещение ползунка и т.п.)

 

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

 

Добавление элементов управления можно производить и программным способом (при помощи метода Add() коллекции Controls), однако вам при этом придется указывать в коде программы большое количество свойств создаваемого элемента управления, что не очень удобно.

Форма– это главный объект, образующий визуальную основу приложения. По своей сути форма представляет собой окно, в котором можно размещать различные управляющие элементы при создании приложений. Для создания формы необходимо выполнить команду Вставка >UserForm. В окне Конструктора форм появится форма, имеющая стандартный вид для ОС Windows