Использование функций VisualBasic
Вы уже пользовались встроенными VBA-функциями: InputBox и MsgBox. Функция (function) – это встроенная формула, выполняющая действия над выражениями и генерирующая значение. Функция всегда возвращает значение, которое VBA вставляет в программу в том месте, где появляется имя функции. Функции VBA делятся на несколько групп в зависимости от типа операции или вычисления, которое они выполняют. Не путайте термины функция и процедура. Обычно процедура выполняет определенную задачу (или группу задач) подобно тому, как определенная команда меню в Excel, Word или другом приложении выполняет конкретную задачу. Функция оперирует одним или более значениями и возвращает некоторое результирующее значение (как формула в ячейке рабочего листа Excel). Чтобы использовать функцию, просто вводите имя функции в оператор VBA вместе с любыми аргументами, которые требуются для этой функции, в том месте в операторе, где вам необходимо использовать результат функции. Помещение имени функции в оператор VBA для активизации функции называют вызовом (calling) функции.
Встроенные функции VBA делятся на несколько категорий на основе общего назначения функций (математические, преобразования данных, даты и времени, строковые и работы с диском).
Математические функции
VBA предоставляет стандартный набор математических функций (табл. 15). Таблица 15 – Математические функции VBA (N означает любое численное выражение)
Функции(аргументы) | Возвращает/действие |
Abs(N) | Возвращает абсолютное значение N |
Cos(N) | Косинус угла N, где N – это угол, измеренный в радианах |
Sin(N) | Возвращает синус угла; N – это угол, измеренный в радианах |
Tan(N) | Возвращает тангенс угла; N – угол в радианах |
Atn(N) | Возвращает арктангенс N как угол в радианах |
Exp(N) | Возвращает константу е, возведенную в степень N (е – это основание натуральных логарифмов и она (приблизительно) равна 2,718282) |
Fix(N) | Возвращает целую часть N. Fix не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Fix возвращает ближайшее отрицательное целое большее, чем или равное N |
Int(N) | Возвращает целую часть N. Int не округляет число, а отбрасывает любую дробную часть. Если N является отрицательным, Int возвращает ближайшее отрицательное целое меньшее, чем или равное N |
Log(N) | Возвращает натуральный логарифм N |
Rnd(N) | Возвращает случайное число; аргумент является необязательным. Используйте функцию Rnd только после инициализации VBA-генератора случайных чисел оператором Randomize |
Sgn(N) | Возвращает знак числа: –1, если N – отрицательное; 1, если N – положительное; 0, если N равно 0 |
Sqr(N) | Возвращает корень квадратный из N. VBA отображает ошибку времени исполнения, если N – отрицательное |
Функции преобразования данных
VisualBasic предоставляет несколько функций для преобразования одного типа данных в другой (табл. 16). Используйте эти функции для устранения ошибок несовпадения типов и обеспечения явного контроля за типами данных в выражениях.
Таблица 16 – Функции преобразования данных (N – это любое численное,
S – любое строковое, а Е – выражение любого типа)
Функция(аргументы) | Возвращает/действие |
Asc(S) | Возвращает число кода символа, соответствующее первой букве строки S. Буква "А", например, имеет код символа 65 |
Функция(аргументы) | Возвращает/действие |
Chr(N) | Возвращает строку из одного символа, соответствующего коду символа N, который должен быть числом между 0 и 255, включительно. Код символа 65, например, возвращает букву "А" (Chr(13) – символ возврата каретки, Chr(10) – символ смещения на одну строку) |
Format(E, S) | Возвращает строку, содержащую значение, представленное выражением Е, в формате в соответствии с инструкциями, содержащимися в S |
Hex(N) | Возвращает строку, содержащую шестнадцатиричное представление N |
Oct(N) | Возвращает строку, содержащую восьмиричное представление N |
RGB(N, N, N) | Возвращает целое типа Long, представляющее значение основных цветов изображения. N в каждом аргументе должно быть целым в диапазоне 0 – 255, включительно. Аргументы (слева направо) – это значения для красного, зеленого и синего цвета |
Str(N) | Возвращает строку, эквивалентную численному выражению N |
Val(S) | Возвращает численное значение, соответствующее числу, представленному строкой S, которая должна содержать только цифры и одну десятичную точку, иначе VBA не может преобразовать ее в число. Если VBA не может преобразовать строку в S, то функция Valвозвращает 0 |
CBool(N) | Возвращает Boolean-эквивалент численного выражения N |
CByte(E) | Возвращает численное значение типа Byte (от 0 до 255); Е – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
CCur(E) | Возвращает численное значение типа Currency; E – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
CDate(E) | Возвращает значение типа Date. E может быть любым допустимым выражением (строкой или числом), представляющим дату в диапазоне 1/1/100 – 12/31/9999, включительно |
CDbl(E) | Возвращает численное значение типа Double; E – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
Cint(E) | Возвращает численное значение типа Integer; E – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
CLng(E) | Возвращает численное значение типа Long; E – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
Функция(аргументы) | Возвращает/действие |
CSng(E) | Возвращает численное значение типа Single;E – любое допустимое численное или строковое выражение, которое может быть преобразовано в число |
CStr(E) | Возвращает значение типа String; E – любое допустимое численное или строковое выражение |
CVar(E) | Возвращает значение типа Variant; E – любое допустимое численное или строковое выражение |
Функции даты и времени
VBA-функции даты и времени обычно используются для получения текущей даты и времени, разбиения значения даты на ее составляющие части или для преобразования строк и чисел в значения типа Date (табл. 17).
Таблица 17 – Функции даты и времени (N – любое допустимое численное выражение, a D – любое допустимое выражения типа Date (включая значения типа Date, числа или строки, которые VBA может преобразовать в дату); все аргументы функций являются обязательными, если только не указано иначе)
Функции(аргументы) | Возвращает/действие |
Date | Возвращает системную дату. Можно также использовать эту функцию как процедуру для установки системных часов компьютера. Более подробно можно узнать из справочной системы VBA |
Time | Возвращает системное время компьютера как значение типа Date. Можно также использовать эту функцию как процедуру для установки системных часов. Более подробно можно узнать из справочной системы VBA |
Now | Возвращает системную дату и время |
Year(D) | Возвращает целое, являющееся частью выражения типа Dateи содержащее год. Год возвращается как число между 100 и 9999 |
Month(D) | Возвращает целое, являющееся частью выражения типа Date, содержащее месяц. Месяц возвращается как число между 1 и 12, включительно |
Day(D) | Возвращает целое, являющееся частью выражения типа Dateи содержащее день. День возвращается как число между 1 и 31, включительно |
Weekday(D) | Возвращает целое, содержащее день недели для выражения типа Date. День недели возвращается как число между 1 и 7, включительно; 1 – это воскресенье, 2 – понедельник и так далее |
Hour(D) | Возвращает целое, содержащее часы как часть времени, содержащегося в выражении типа Date. Часы возвращаются как число между 0 и 23, включительно. Если выражение D не содержит значения времени, то Hour возвращает 0 |
Функции(аргументы) | Возвращает/действие |
Minute(D) | Возвращает целое, содержащее минуты как часть времени в выражении типа Date.Минуты возвращаются как число между 0 и 59, включительно. Если выражение D не содержит значения времени, Minute возвращает 0 |
Second(D) | Возвращает целое, содержащее секунды как часть времени в выражении типа Date. Секунды возвращаются как число между 0 и 59, включительно. Если выражение D не содержит значения времени, Second возвращает 0 |
DateAdd(S, N, D) | Возвращает значение [тип Variant (Date)], содержащее дату, к которой добавлен заданный интервал времени |
DateDiff(S, D1, D2[, Nl [, N2 ]]) | Возвращает значение [тип Variant (Long)] числа временных интервалов между двумя определенными датами |
DatePart(S, D, [, N1 [, N2]]) | Возвращает определенную часть [тип Variant (Integer)] заданной даты |
DateSerial(N, N, N) | Возвращает значение последовательной даты для заданной даты. Слева направо аргументы представляют год, месяц и день. Аргумент года должен быть целым числом между 100 и 9999, месяца — между 1 и 12, дня — между 1 и 31 (все диапазоны являются включающими) |
TimeSerial(N, N, N) | Возвращает значение последовательного времени. Слева направо аргументы представляют часы, минуты и секунды. Аргумент часов должен быть целым числом между 0 и 23, аргументы минут и секунд должны оба быть числами от 0 по 59 |
DateValue(E) | Возвращает значение типа Date, эквивалентное дате, заданной аргументом Е, который должен быть строкой, числом или константой, представляющей дату |
TimeValue(E) | Возвращает значение типа Date, содержащее время, заданное аргументом Е, который может быть строкой, числом или константой, представляющей время |
Timer | Возвращает число, представляющее количество секунд от полуночи в соответствии с системным временем компьютера |
Некоторые из перечисленных функций уже использовались в примерах этой |
книги, другие — будут использоваться далее.
Строковые функции
Строковые функции VBA часто применяются для нахождения заданных строк внутри других строк, для сравнения одной строки с другой и копирования выбранных частей строк (табл. 18).
Таблица 18 – Строковые функции (N – это любое допустимое численное выражение, a S – это любое допустимое строковое выражение)
Функция(аргумент) | Возвращает/действие |
InStr([N1,] S1, S2[, N2]) | Возвращает положение S2 в S1. N1 – начальное положение для поиска; N2 определяет тип сравнения. N1 и N2 необязательны. Если N2 опускается, то для поиска используется текущая установка OptionCompare |
InStrRev(Sl, S2 [, Nl[, N2]]) | Возвращает позицию появления строки S2 внутри S1, в направлении от конца (или N1) к началу строки. N2 определяет тип сравнения. Если N2 опускается, то для поиска используется текущая установка OptionCompare |
LCase(S) | Возвращает строку (тип String), содержащую копию S со всеми символами верхнего регистра, преобразованными в символы нижнего регистра |
Left(S, N) | Возвращает строку; копирует N символов из S, начиная с левого крайнего символа S |
Len(S) | Возвращает число символов в S, включая начальные и конечные пробелы |
LTrim(S) | Возвращает копию строки S после удаления символов пробела из левой части строки (начальные пробелы) |
Mid(S, N1, N2) | Возвращает строку; копирует N2 символов из S, начиная с позиции символа в S, заданной аргументом N1. N2 является необязательным; если N2 опущен, то Mid возвращает все символы в строке S от позиции N1 до конца строки |
Right(S, N) | Возвращает значение типа String;копирует N символов из S, начиная с правого крайнего символа S |
RTrim(S) | Возвращает копию строки S после удаления символов пробела из правой части строки (конечные символы) |
Space(N) | Возвращает строку пробелов длиной N символов |
StrComp(Sl, S2, N) | Сравнивает S1 с S2 и возвращает число, обозначающее результат сравнения: -1, если SI < S2; 0, если SI = S2; 1, если SI > S2.N является необязательным и указывает, следует ли выполнять сравнение с учетом регистра. Если N опускается, строки сравниваются с использованием текущей установки OptionCompare |
StrConv(S, N) | Возвращает строку, преобразованную в новую форму в зависимости от числового кода, заданного аргументом N. VBA предоставляет внутренние константы для использования с функцией StrConv;наиболее полезными являются: vbProperCase (преобразует строку так, что каждая буква, начинающая слово, становится заглавной), vbLowerCase(преобразует строку в буквы нижнего регистра) и vbUpperCase (преобразует строку в буквы верхнего регистра) |
Функция(аргумент) | Возвращает/действие |
String(N, S) | Возвращает строку длиной N символов, состоящую из символа, заданного первым символом в S |
Trim(S) | Возвращает копию строки S после удаления начальных и конечных символов пробела из этой строки |
UCase(S) | Возвращает S со всеми символами нижнего регистра, преобразованными в символы верхнего регистра |
Несколько перечисленных в табл. 16 функций преобразования типа данных |
относятся также к манипулированию строками: Chr, Format, CStr, в частности.