Опубликован: 01.04.2010 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский университет "Высшая Школа Экономики"
Лекция 7:

Процедуры, подпрограммы и функции

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Автопроцедуры

Если процедурам присвоить специальные имена, то они запускаются автоматически.

  • Процедура с именем Auto_Open автоматически запускается при открытии рабочей книги или приложения MS Excel.
  • Процедура с именем Auto_Close автоматически запускается при закрытии рабочей книги или приложения MS Excel.

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

Запомните

  • Если процедуры с указанными именами записываются в Личную книгу макросов (Personal Macro Workbook), то они автоматически выполняются при открытии или закрытии приложения.
  • Нажатие клавиши Shift при открытии или при закрытии рабочей книги предотвращает выполнение автоматической процедуры.

Событийные процедуры

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

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

Событийные процедуры имеют составные имена: название или тип объекта и название события, разделенные нижним подчеркиванием ( _ ). Например, процедура с именем Workbook_Open выполняется при открытии рабочей книги, для которой эта процедура написана. Имена присваиваются событийным процедурам автоматически.

Пример

На рис. 7.12 в окне проекта выбрана рабочая книга (объект Эта книга ). В списке объектов на процедурном листе рабочей книги выбран объект Workbook. Как следствие в списке процедур раскрыт список событий объекта Workbook.

Выбор события Open для объекта Эта книга

Рис. 7.12. Выбор события Open для объекта Эта книга

Для события Open, выбранного из списка событий, в окне программы появились операторы начала и конца соответствующей событийной процедуры. Имя процедуры установлено автоматически. Теперь можно записать операторы, которые должны выполняться при наступлении события - открытия рабочей книги.

При открытии рабочей книги iserror название рабочей книги и активного рабочего листа помещаются в ячейки таблицы A1 и A2 соответственно.

Результат выполнения событийной процедуры открытия рабочей книги iserror

Рис. 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
* Функции не имеют аргументов и могут записываться без скобок
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Дмитрий Денисов
Дмитрий Денисов

Еще раз повторяю вопрос  - отправил договор и сканы документов по почте - в начале августа, до  5 го, внес предоплату - летом действовала скидка - чтобы пройти курс в августе, но я уезжал в Москву. По возвращению - и  в течение месяца - никакого ответа, никаких зачислений, ничего. Как проверить, пришли ли мои документы в Интуит, предоплата, почему нет зачисления.

Дмитрий Денисов
Дмитрий Денисов

Как записаться на курс, оплатить, не ориентируюсь в программе.

Ранее у Вас учился.

Работаю преподавателем, есть справка. Как получить скидку, т.е. оплата 2000


 

Елизавета Cафронова
Елизавета Cафронова
Россия, Выкса, НИТУ МИССиС
Иван Чуприков
Иван Чуприков
Россия, пгт. Чульман