Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

288

Часть III. Visual Basic for Applications

Процедуры типа Function универсальны и используются в двух ситуациях:

как часть выражения в процедуре VBA;

в формулах, которые создаются на рабочем листе.

Процедуру типа Function можно использовать в работе с функциями Excel и встро­ енными функциями VBA. Единственное исключение — невозможно использовать функ­ цию VBA в формуле проверки данных.

Перекрестная ссылка

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

Назначение пользовательских функций

Несомненно, вам знакомы функции Excel. Даже начинающие пользователи знают, как

работать

с самыми популярными функциями в формулах рабочего листа— СУММ,

С Р З Н А Ч

и ЕСЛ И . Excel 2010 содержит более 400 встроенных функций. Если этого коли­

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

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

Например, зачастую пользовательские функции создаются, чтобы сократить форму­ лы. Короткие формулы намного легче воспринимаются и обрабатываются. Однако сле­ дует отметить, что специальные функции, используемые в формулах, обычно выполня­ ются медленнее, чем встроенные.

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

Созданные вами функции окажутся полезными и для ваших коллег. Другие програм­ мисты, возможно, захотят приобрести специальные функции, которые экономят рабочее время и затрачиваемые на их программирование усилия.

Вас может пугать мысль о создании пользовательских функций, однако этот процесс не­ сложен. Например, я люблю создавать пользовательские функции, они отображаются в диа­ логовом окне Мастер функций (Insert Function) наряду со встроенными функциями Excel. Возникает ощущение, будто вы самостоятельно обновляете программное обеспечение.

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

Простой пример функции

Чтобы сразу же перейти к делу, рассмотрим пример функции VBА. Ниже приведена поль­ зовательская функция, определенная в модуле VBA. Она называется RemoveVowels и при­ нимает один аргумент. Затем она удаляет все гласные буквы и возвращает аргумент.

F u n c t io n R e m o v e V o w e ls ( T x t) A s S t r in g

' У д а л я е т в с е гл а с н ы е б у к в ы и з т е к с т о в о г о а р г у м е н т а

Глава 10. Создание функций

291

Анализ пользовательской функции

Функции могут быть достаточно сложными, если это необходимо. Как правило, они более сложны и намного более полезны, чем процедура в приведенном ниже примере. И анализ рассматриваемого в предыдущем разделе примера функции поможет вам разо­ браться в данном вопросе.

Приведем текст функции.

F u n c tio n R e m o v e V o w e ls ( T x t) A s S t r i n g

' У д а л я е т в с е гл а сн ы е б у к в ы и з т е к с т о в о г о а р г у м е н т а Dim i A s L o n g

R em oveV ow els = ""

F o r i = 1 To L e n ( T x t )

I f N o t U C a s e ( M id ( T x t , i , 1 )) L ik e " [АЕЮиАЕИОУЫЭЮ Я] " T h e n

R e m o v e V o w e ls = R e m o v e V o w e ls & M id ( T x t , i , 1) End I f

N ext i

End F u n c t io n

Обратите внимание, что функция начинается с ключевого слова F u n ctio n , а не Sub, после которого указывается название функции (RemoveVowels). Эта специальная функция использует только один аргумент (Txt), заключенный в скобки. Ключевое сло­ во As S trin g определяет тип данных значения, которое возвращает функция. (Excel по умолчанию использует тип данных V a ria n t, если тип данных не определен.)

Вторая строка— простой комментарий (необязательный), который описывает вы­ полняемые функцией действия. После комментария приведен оператор Dim, который объявляет переменную (i), применяемую в функции. Тип этой переменной — Long.

• ч Примечание

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

Следующие пять инструкций образуют цикл F or-N ext. Процедура циклически про­ сматривает каждый символ введенного текста, создавая на их основе строку. Первая ин­ струкция в цикле использует функцию VBA Mid, которая возвращает единственный символ строки ввода, а также преобразует этот символ в символ верхнего регистра. За­ тем этот символ сравнивается со списком символов с помощью оператора Excel Like. Другими словами, значение выражения I f будет True, если символ отличен от симво­ лов А, Е, I, О, U, А, Е, И, О, У, Ы, Э, Юи Я. В подобных случаях символ добавляется к пе­ ременной RemoveVowels.

По завершении цикла из строки ввода удаляются все гласные буквы. Эта строка и яв­ ляется значением, возвращаемым функцией RemoveVowels. Сама процедура заверша­ ется оператором End Func t i on.

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

Function

R e m o v e V o w e ls ( t x t ) A s

S t r i n g

1 Удаляет

в се гл а с н ы е б у к в ы

и з т е к с т о в о г о а р г у м е н т а (T x t)

Dim

i

A s

L o n g

 

Dim

T e m p S trin g A s S t r i n g