Автопроцедуры
Если процедурам присвоить специальные имена, то они запускаются автоматически.
- Процедура с именем Auto_Open автоматически запускается при открытии рабочей книги или приложения MS Excel.
- Процедура с именем Auto_Close автоматически запускается при закрытии рабочей книги или приложения MS Excel.
Обычно в этих процедурах создаются панели инструментов, разрешается или отменяется их высвечивание, производятся настройки экрана или изменяются меню.
Запомните
- Если процедуры с указанными именами записываются в Личную книгу макросов (Personal Macro Workbook), то они автоматически выполняются при открытии или закрытии приложения.
- Нажатие клавиши Shift при открытии или при закрытии рабочей книги предотвращает выполнение автоматической процедуры.
Событийные процедуры
С каждым объектом приложения или формы связан определенный набор событий. Процедуры обработки событий позволяют выполнить некоторые действия при наступлении того или иного события, связанного с объектом приложения.
Событийные процедуры записываются на процедурных листах - листах-обработчиках событий. Двойной щелчок на объект в окне проекта (рабочая книга, рабочий или диаграммный лист, форма) открывает процедурный лист, связанный с выбранным объектом приложения.
Событийные процедуры имеют составные имена: название или тип объекта и название события, разделенные нижним подчеркиванием ( _ ). Например, процедура с именем Workbook_Open выполняется при открытии рабочей книги, для которой эта процедура написана. Имена присваиваются событийным процедурам автоматически.
Пример
На
рис.
7.12 в окне проекта выбрана рабочая книга (объект Эта книга ). В списке объектов на процедурном листе рабочей книги выбран объект Workbook. Как следствие в списке процедур раскрыт список событий объекта Workbook.
Рис.
7.12.
Выбор события Open для объекта Эта книга
Для события Open, выбранного из списка событий, в окне программы появились операторы начала и конца соответствующей событийной процедуры. Имя процедуры установлено автоматически. Теперь можно записать операторы, которые должны выполняться при наступлении события - открытия рабочей книги.
При открытии рабочей книги iserror название рабочей книги и активного рабочего листа помещаются в ячейки таблицы A1 и A2 соответственно.
Рис.
7.13.
Результат выполнения событийной процедуры открытия рабочей книги iserror
Встроенные функции
Классы функций
Язык Visual Basic имеет большое число встроенных функций. Это математические функции, функции для строковых переменных, функции даты и времени, функции преобразования данных, финансовые и информационные функции.
Рис.
7.14.
Классы функций и перечень строковых функций
Классы функций можно увидеть в Object Browser, выбрав библиотеку VBA.
Дополнительно можно задать название класса функций на английском языке и выполнить поиск.
Использование табличных функций
Наряду с функциями VBA в процедурах можно использовать встроенные функции рабочего листа (табличные функции). Названия функций VBA и функций рабочего листа часто совпадают, но параметры функций могут различаться. Часть встроенных табличных функций не имеет аналогов в VBA, например, функции Max или Min.
При необходимости использования табличной функции нужно сделать уточнение при помощи ссылки на объект Application или объект WorksheetFunction (
рис.
7.15).
ВНИМАНИЕ
- Независимо от русскоязычной или англоязычной версий MS Office названия функций VBА и функций рабочего листа в процедурах записываются на английском языке.
Пример
Рассчитать максимум из 4-х чисел и их среднее арифметическое.
Процедура использует две функции рабочего листа: Max и Average. Ниже в примере приведены оба способа ссылок на функции рабочего листа.
Рис.
7.15.
Уточнения при использовании табличных функций
Строковые функции
Visual Basic располагает большим набором встроенных функций для обработки алфавитно-цифровых (символьных) данных. Многие из них совпадают с табличными. Но есть табличные строковые функции, отсутствующие в языке VBA, и наоборот.
Строковые функции VBA
Название и синтаксис функции |
Описание |
Примеры |
Asc(string) |
Возвращает ASCII-код символа
|
Asc("*") возвращает 42 |
Chr(charcode) |
Возвращает символ по ASCII-коду |
Chr(42) возвращает * |
Format(еxpression [,format][,firstdayofweek][,firstweekofyear]) |
Преобразует аргумент в соответствии с заданным форматом |
Format(42.399, "#.00") возвращает 42,40 Format("HELLO, MY FREND", "<") возвращает hello, my frend
|
Hex(number) |
Возвращает шестнадцатиричное представление числа |
Hex(18) возвращает 12 Hex(31) возвращает 1F
|
InStr([start,] string1, string2[,compare]) |
Ищет подстроку в прямом направлении |
InStr(1, "To be or not to be", "be") возвращает 4 |
InstrRev(stringcheck, stringmatch[, start][, compare]) |
Ищет подстроку в обратном направлении |
InstrRev("To be or not to be", "be") возвращает 17 |
LCase(string) |
Преобразует строку в нижний регистр |
LCase("World") возвращает world
|
Left(string, length) |
Выделяет левую часть строки |
Left("World", 2) возвращает Wo |
Len(string) |
Определяет длину строки |
Len("World") возвращает 5 |
LTrim(string) |
Удаляет ведущие пробелы Пробелы справа сохраняются
|
LTrim(" extra spaces ") возвращает extra spaces без левых пробелов |
Mid(string, start[, length]) |
Выделяет подстроку |
Mid("World", 2,3) возвращает orl
|
Oct(number) |
Возвращает восьмеричное представление числа |
Oct(12) возвращает 14 |
Replace(expression, find, replace[,start][,count][,compare]) |
Заменяет подстроку на новую подстроку |
Replace("The car is red", "red", "blue") возвращает The car is blue
|
Right(string, length) |
Выделяет правую часть строки |
Right("World",2) возвращает ld
|
RTrim(string) |
Удаляет завершающие пробелы Пробелы слева сохраняются
|
RTrim(" extra spaces ") возвращает extra spaces без правых пробелов |
Space(number) |
Создает строку пробелов |
Space(6) создает строку из 6 пробелов |
Str(number) |
Преобразует число в строку |
Str(123) возвращает строку 123 |
StrComp(string1, string2[, compare]) |
Сравнивает две строки:
-
compare=0 двоичное сравнение
-
compare=1 текстуальное сравнение
|
StrComp("WORld", "world", 1) возвращает 0 (равенство строк будет обнаружено при текстуальном сравнении) |
String(number, character) |
Создает строку символов |
String (5,"*") и String (5,42) возвращают ***** . 42 - ASCII-код символа * |
Trim(string) |
Удаляет пробелы с двух сторон строки |
Trim(" extra spaces ") возвращает extra spaces без левых и правых пробелов |
UCase(string) |
Преобразует строку в верхний регистр |
UCase("World") возвращает WORLD
|
Val(string) |
Преобразует строку в число |
Val("6.28") возвращает число 6.28 |
Функции преобразования текстовых данных в другие типы данных
Функция |
Тип результата |
|
Функция |
Тип результата |
CBооl |
Воо1еап |
|
CCиr |
Сиrrепсу |
CDate |
Date |
|
CDbl |
Doublе |
CInt |
Iпtegеr |
|
CLng |
Long |
CSng |
Single |
|
CStr |
String |
CVаr |
Variant |
|
|
|
В качестве параметра функциям преобразования строк передается выражение ( expression ), которое и преобразуется в выбранный тип.
Математические функции
Каждая математическая функция имеет один параметр - число ( number ). При использовании действительных чисел как констант разделителем целой и дробной части является точка. В разделе Derived Math Functions справочника по VBA можно найти формулы расчета математических функций, не являющихся встроенными функциями.
Математические функции
Функция |
Описание |
Abs |
Возвращает абсолютную величину числа
|
Atn |
Возвращает арктангенс числа |
Cоs |
Возвращает косинус угла* |
Eхр |
Возвращает степень числа e (еx) |
Fiх |
Возвращает целую часть числа |
Int |
Округляет число до меньшего целого числа |
Log |
Возвращает натуральный логарифм числа (основание е = 2.71828...) |
Randomize |
Инициирует генератор случайных чисел |
Rnd |
Возвращает случайное число |
Round |
Округляет число до целого, если не задан аргумент numdecimalplaces (десятичный разряд, до которого производится округление) |
Sin |
Возвращает синус угла* |
Sgn |
Возвращает знак числа |
Sqr |
Возвращает квадратный корень из числа |
Тап |
Возвращает тангенс угла* |
* Углы задаются в радианах. Для перевода градусов в радианы умножьте градусы на /180. |
Функции даты и времени
Под датой подразумевается переменная типа Date или дата-константа, которая задана согласно системному краткому формату даты с разделителями даты, определенными системной настройкой, и заключена в кавычки c использованием символа "решетка" ( # ).
Важно
- Переменная типа Date в памяти компьютера сохраняется как число типа Double. Целая часть числа - это дата, а дробная часть - время.
- Полезная информация при работе с переменными типа Date: одни сутки - это 24 часа, или 1440 минут, или 86400 секунд.
Таблица функций Даты и времени
Название и синтаксис функций |
Описание |
Пример |
Date() * |
Возвращает или устанавливает системную дату |
Date_Today=Date() запоминает системную дату Date = #7/26/2007# устанавливает новую системную дату
|
DateSerial(year, month, day) |
Преобразует в дату три целых числа: год, месяц и день |
DateSerial(2007,7,24) возвращает 24.07.2007 |
DateValue(date) |
Преобразует в дату символьное представление даты |
DateValue("24 июля 2007") возвращает 24.07.2007 |
Если год не задан, то используется год из системной даты |
Day(date) |
Из даты выделяет день месяца |
Day(#7/24/2007#) возвращает 24 |
Hour(time) |
Из заданного времени выделяет часы |
Hour (#4:35:17 PM#) возвращает 16 |
Minute(time) |
Из заданного времени выделяет минуты |
Minute(#4:35:17 PM#) возвращает 35 |
Month(date) |
Из даты выделяет месяц |
Month (#7/24/2007#) возвращает 7 |
Now() * |
Возвращает текущую дату и текущее время |
Date_Today=Now() |
Second(date) |
Из заданного времени выделяет секунды |
Second (#4:35:17 PM#) возвращает 17 |
Time() * |
Возвращает или устанавливает системное время |
Time_Today= Time() |
Timer() * |
Возвращает временной интервал в секундах от полуночи (тип Single ) |
TimeSerial(hour, minute, second) |
Преобразует в дату три целых числа: часы, минуты и секунды |
TimeSerial(16, 35, 17) возвращает 16:35:17 |
TimeValue(time) |
Преобразует в дату символьное представление времени |
TimeValue("4:35:17PM") возвращает время 16:35:17 |
Weekday(date, [firstdayofweek]) |
Возвращает день недели, соответствующий заданной дате |
Weekday(#7/25/2007#, 2) возвращает 3 (третий день недели - среда) |
Year(date) |
Из даты выделяет год |
Year(#7/24/2007#) возвращает 2007 |
* Функции не имеют аргументов и могут записываться без скобок |