Как сделать подпрограмму в вба
Добавил пользователь Дмитрий К. Обновлено: 05.10.2024
Если процедурам присвоить специальные имена, то они запускаются автоматически.
- Процедура с именем Auto_Open автоматически запускается при открытии рабочей книги или приложения MS Excel.
- Процедура с именем Auto_Close автоматически запускается при закрытии рабочей книги или приложения MS Excel.
Обычно в этих процедурах создаются панели инструментов, разрешается или отменяется их высвечивание, производятся настройки экрана или изменяются меню .
- Если процедуры с указанными именами записываются в Личную книгу макросов (Personal Macro Workbook), то они автоматически выполняются при открытии или закрытии приложения.
- Нажатие клавиши Shift при открытии или при закрытии рабочей книги предотвращает выполнение автоматической процедуры.
Событийные процедуры
С каждым объектом приложения или формы связан определенный набор событий. Процедуры обработки событий позволяют выполнить некоторые действия при наступлении того или иного события, связанного с объектом приложения.
Событийные процедуры записываются на процедурных листах - листах-обработчиках событий. Двойной щелчок на объект в окне проекта ( рабочая книга , рабочий или диаграммный лист , форма) открывает процедурный лист , связанный с выбранным объектом приложения.
Событийные процедуры имеют составные имена: название или тип объекта и название события, разделенные нижним подчеркиванием ( _ ). Например, процедура с именем Workbook_Open выполняется при открытии рабочей книги , для которой эта процедура написана. Имена присваиваются событийным процедурам автоматически.
На рис. 7.12 в окне проекта выбрана рабочая книга ( объект Эта книга ). В списке объектов на процедурном листе рабочей книги выбран объект Workbook . Как следствие в списке процедур раскрыт список событий объекта Workbook .
Для события Open , выбранного из списка событий, в окне программы появились операторы начала и конца соответствующей событийной процедуры. Имя процедуры установлено автоматически. Теперь можно записать операторы , которые должны выполняться при наступлении события - открытия рабочей книги .
При открытии рабочей книги iserror название рабочей книги и активного рабочего листа помещаются в ячейки таблицы A1 и A2 соответственно.
Встроенные функции
Классы функций
Язык Visual Basic имеет большое число встроенных функций. Это математические функции , функции для строковых переменных, функции даты и времени, функции преобразования данных , финансовые и информационные функции.
Классы функций можно увидеть в Object Browser, выбрав библиотеку VBA.
Дополнительно можно задать название класса функций на английском языке и выполнить поиск.
Использование табличных функций
Наряду с функциями VBA в процедурах можно использовать встроенные функции рабочего листа (табличные функции). Названия функций VBA и функций рабочего листа часто совпадают, но параметры функций могут различаться. Часть встроенных табличных функций не имеет аналогов в VBA, например, функции Max или Min .
При необходимости использования табличной функции нужно сделать уточнение при помощи ссылки на объект Application или объект WorksheetFunction ( рис. 7.15).
- Независимо от русскоязычной или англоязычной версий MS Office названия функций VBА и функций рабочего листа в процедурах записываются на английском языке.
Рассчитать максимум из 4-х чисел и их среднее арифметическое.
Процедура использует две функции рабочего листа : Max и Average . Ниже в примере приведены оба способа ссылок на функции рабочего листа .
Строковые функции
Visual Basic располагает большим набором встроенных функций для обработки алфавитно-цифровых (символьных) данных. Многие из них совпадают с табличными. Но есть табличные строковые функции , отсутствующие в языке VBA, и наоборот.
Format("HELLO, MY FREND", " возвращает hello, my frend
Hex (31) возвращает 1F
Пробелы справа сохраняются
Пробелы слева сохраняются
В качестве параметра функциям преобразования строк передается выражение ( expression ), которое и преобразуется в выбранный тип.
Математические функции
Каждая математическая функция имеет один параметр - число ( number ). При использовании действительных чисел как констант разделителем целой и дробной части является точка. В разделе Derived Math Functions справочника по VBA можно найти формулы расчета математических функций, не являющихся встроенными функциями.
Функции даты и времени
В Visual Basic процедуры и функции выполняют важную роль при работе с этим языком. Например, они способны:
- устранить лишние строки в вашем коде, потому что можно один раз и в одном месте создать процедуру или функцию, а потом вызывать ее при необходимости;
- улучшить восприятие ваших скриптов, так как их легче читать и понимать;
- упростить разработку скриптов, потому что не нужно постоянно повторять один и тот же код, а скрипты будут разделены на отдельные логические блоки.
Visual Basic (VBA) функции и процедуры
- функция по своей особенности может возвращать какое-то значение через собственное имя, то есть ее можно применять в качестве операнда в выражениях, а процедура может возвращать результаты только через параметры, поэтому ее нельзя применять в выражениях;
- функция вызывается путем указания ее имени в каком-либо операторе, а процедура вызывается отдельным оператором.
Процедуры VBA
Процедурам, как и функциям, нужно давать уникальные имена и при необходимости дописывать требуемые параметры.
Передача параметров в процедуру VBA
Когда мы вызываем процедуру, в ней располагаются фактические параметры, чьи значения нам уже известны. Такие значения мы можем передавать в процедуру по ссылке или по значению. Потому что каждая переменная в процедуре имеет свое собственное значение и уникальный адрес расположения в оперативной памяти компьютера.
Вот и получается, что VBA дает возможность передавать параметры в процедуру, используя уникальное значение переменной или по ее адресу в оперативной памяти.
- ByVal — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по значению переменной.
- ByRef — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по ссылке переменной.
Функции в Visual Basic
- Математические. Например: Abs, Cos, Exp, Int, Fix, Log, Rnd, Round, Sin и др.
- Для преобразования типов и представления данных. Например: Cbool, Cbyte, Ccur, Cdate, Csng. Cvar, Hex и др.
- Для работы с массивами. Например: Array, Erase, Lbound, Ubound и др.
- Для обработки строк. Например: Asc, Choose, Chr, Error, Filter, Format и др.
- Стандартные, для ввода-вывода и работы с цветом. Например: InputBox, MsgBox, QBColor, RGB и др.
- Для работы с датой и временем. Например: Date, DateAdd, DateDiff, Day, Hour, Minute и др.
- Для работы с папками и файлами. Например: ChDir, ChDrive, Close, FileAttr и др.
- Для работы с объектами и приложениями. Например: CallByName, CreateObject, Environ и др.
- Функции статуса. Например: IsArray, IsDate, IsError, IsNull и др.
- Финансовые. Например: DDB, FV, Ipmt, IRR, MIRR, NPV и др.
Заключение
В Visual Basic (VBA) функции и процедуры, как правило, облегчают работу над подпрограммами, которые вы будете кодить. Поэтому пробуйте и берите на вооружение эти возможности языка, чтобы облегчить свою работу.
Если процедурам присвоить специальные имена, то они запускаются автоматически.
- Процедура с именем Auto_Open автоматически запускается при открытии рабочей книги или приложения MS Excel.
- Процедура с именем Auto_Close автоматически запускается при закрытии рабочей книги или приложения MS Excel.
Обычно в этих процедурах создаются панели инструментов, разрешается или отменяется их высвечивание, производятся настройки экрана или изменяются меню .
- Если процедуры с указанными именами записываются в Личную книгу макросов (Personal Macro Workbook), то они автоматически выполняются при открытии или закрытии приложения.
- Нажатие клавиши Shift при открытии или при закрытии рабочей книги предотвращает выполнение автоматической процедуры.
Событийные процедуры
С каждым объектом приложения или формы связан определенный набор событий. Процедуры обработки событий позволяют выполнить некоторые действия при наступлении того или иного события, связанного с объектом приложения.
Событийные процедуры записываются на процедурных листах - листах-обработчиках событий. Двойной щелчок на объект в окне проекта ( рабочая книга , рабочий или диаграммный лист , форма) открывает процедурный лист , связанный с выбранным объектом приложения.
Событийные процедуры имеют составные имена: название или тип объекта и название события, разделенные нижним подчеркиванием ( _ ). Например, процедура с именем Workbook_Open выполняется при открытии рабочей книги , для которой эта процедура написана. Имена присваиваются событийным процедурам автоматически.
На рис. 7.12 в окне проекта выбрана рабочая книга ( объект Эта книга ). В списке объектов на процедурном листе рабочей книги выбран объект Workbook . Как следствие в списке процедур раскрыт список событий объекта Workbook .
Для события Open , выбранного из списка событий, в окне программы появились операторы начала и конца соответствующей событийной процедуры. Имя процедуры установлено автоматически. Теперь можно записать операторы , которые должны выполняться при наступлении события - открытия рабочей книги .
При открытии рабочей книги iserror название рабочей книги и активного рабочего листа помещаются в ячейки таблицы A1 и A2 соответственно.
Встроенные функции
Классы функций
Язык Visual Basic имеет большое число встроенных функций. Это математические функции , функции для строковых переменных, функции даты и времени, функции преобразования данных , финансовые и информационные функции.
Классы функций можно увидеть в Object Browser, выбрав библиотеку VBA.
Дополнительно можно задать название класса функций на английском языке и выполнить поиск.
Использование табличных функций
Наряду с функциями VBA в процедурах можно использовать встроенные функции рабочего листа (табличные функции). Названия функций VBA и функций рабочего листа часто совпадают, но параметры функций могут различаться. Часть встроенных табличных функций не имеет аналогов в VBA, например, функции Max или Min .
При необходимости использования табличной функции нужно сделать уточнение при помощи ссылки на объект Application или объект WorksheetFunction ( рис. 7.15).
- Независимо от русскоязычной или англоязычной версий MS Office названия функций VBА и функций рабочего листа в процедурах записываются на английском языке.
Рассчитать максимум из 4-х чисел и их среднее арифметическое.
Процедура использует две функции рабочего листа : Max и Average . Ниже в примере приведены оба способа ссылок на функции рабочего листа .
Строковые функции
Visual Basic располагает большим набором встроенных функций для обработки алфавитно-цифровых (символьных) данных. Многие из них совпадают с табличными. Но есть табличные строковые функции , отсутствующие в языке VBA, и наоборот.
Format("HELLO, MY FREND", " возвращает hello, my frend
Hex (31) возвращает 1F
Пробелы справа сохраняются
Пробелы слева сохраняются
В качестве параметра функциям преобразования строк передается выражение ( expression ), которое и преобразуется в выбранный тип.
Математические функции
Каждая математическая функция имеет один параметр - число ( number ). При использовании действительных чисел как констант разделителем целой и дробной части является точка. В разделе Derived Math Functions справочника по VBA можно найти формулы расчета математических функций, не являющихся встроенными функциями.
Функции даты и времени
В Visual Basic процедуры и функции выполняют важную роль при работе с этим языком. Например, они способны:
- устранить лишние строки в вашем коде, потому что можно один раз и в одном месте создать процедуру или функцию, а потом вызывать ее при необходимости;
- улучшить восприятие ваших скриптов, так как их легче читать и понимать;
- упростить разработку скриптов, потому что не нужно постоянно повторять один и тот же код, а скрипты будут разделены на отдельные логические блоки.
Visual Basic (VBA) функции и процедуры
- функция по своей особенности может возвращать какое-то значение через собственное имя, то есть ее можно применять в качестве операнда в выражениях, а процедура может возвращать результаты только через параметры, поэтому ее нельзя применять в выражениях;
- функция вызывается путем указания ее имени в каком-либо операторе, а процедура вызывается отдельным оператором.
Процедуры VBA
Процедурам, как и функциям, нужно давать уникальные имена и при необходимости дописывать требуемые параметры.
Передача параметров в процедуру VBA
Когда мы вызываем процедуру, в ней располагаются фактические параметры, чьи значения нам уже известны. Такие значения мы можем передавать в процедуру по ссылке или по значению. Потому что каждая переменная в процедуре имеет свое собственное значение и уникальный адрес расположения в оперативной памяти компьютера.
Вот и получается, что VBA дает возможность передавать параметры в процедуру, используя уникальное значение переменной или по ее адресу в оперативной памяти.
- ByVal — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по значению переменной.
- ByRef — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по ссылке переменной.
Функции в Visual Basic
- Математические. Например: Abs, Cos, Exp, Int, Fix, Log, Rnd, Round, Sin и др.
- Для преобразования типов и представления данных. Например: Cbool, Cbyte, Ccur, Cdate, Csng. Cvar, Hex и др.
- Для работы с массивами. Например: Array, Erase, Lbound, Ubound и др.
- Для обработки строк. Например: Asc, Choose, Chr, Error, Filter, Format и др.
- Стандартные, для ввода-вывода и работы с цветом. Например: InputBox, MsgBox, QBColor, RGB и др.
- Для работы с датой и временем. Например: Date, DateAdd, DateDiff, Day, Hour, Minute и др.
- Для работы с папками и файлами. Например: ChDir, ChDrive, Close, FileAttr и др.
- Для работы с объектами и приложениями. Например: CallByName, CreateObject, Environ и др.
- Функции статуса. Например: IsArray, IsDate, IsError, IsNull и др.
- Финансовые. Например: DDB, FV, Ipmt, IRR, MIRR, NPV и др.
Заключение
В Visual Basic (VBA) функции и процедуры, как правило, облегчают работу над подпрограммами, которые вы будете кодить. Поэтому пробуйте и берите на вооружение эти возможности языка, чтобы облегчить свою работу.
Читайте также: