Как сделать подпрограмму в вба

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

Встроенные функции

Классы функций

Язык 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) функции и процедуры

  • функция по своей особенности может возвращать какое-то значение через собственное имя, то есть ее можно применять в качестве операнда в выражениях, а процедура может возвращать результаты только через параметры, поэтому ее нельзя применять в выражениях;
  • функция вызывается путем указания ее имени в каком-либо операторе, а процедура вызывается отдельным оператором.

Visual Basic (VBA) функции и процедуры

Процедуры VBA

Процедурам, как и функциям, нужно давать уникальные имена и при необходимости дописывать требуемые параметры.

Передача параметров в процедуру VBA

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

Вот и получается, что VBA дает возможность передавать параметры в процедуру, используя уникальное значение переменной или по ее адресу в оперативной памяти.

  1. ByVal — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по значению переменной.
  2. ByRef — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по ссылке переменной.

Функции в Visual Basic

  1. Математические. Например: Abs, Cos, Exp, Int, Fix, Log, Rnd, Round, Sin и др.
  2. Для преобразования типов и представления данных. Например: Cbool, Cbyte, Ccur, Cdate, Csng. Cvar, Hex и др.
  3. Для работы с массивами. Например: Array, Erase, Lbound, Ubound и др.
  4. Для обработки строк. Например: Asc, Choose, Chr, Error, Filter, Format и др.
  5. Стандартные, для ввода-вывода и работы с цветом. Например: InputBox, MsgBox, QBColor, RGB и др.
  6. Для работы с датой и временем. Например: Date, DateAdd, DateDiff, Day, Hour, Minute и др.
  7. Для работы с папками и файлами. Например: ChDir, ChDrive, Close, FileAttr и др.
  8. Для работы с объектами и приложениями. Например: CallByName, CreateObject, Environ и др.
  9. Функции статуса. Например: IsArray, IsDate, IsError, IsNull и др.
  10. Финансовые. Например: 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 для объекта Эта книга

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

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

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

Встроенные функции

Классы функций

Язык 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) функции и процедуры

  • функция по своей особенности может возвращать какое-то значение через собственное имя, то есть ее можно применять в качестве операнда в выражениях, а процедура может возвращать результаты только через параметры, поэтому ее нельзя применять в выражениях;
  • функция вызывается путем указания ее имени в каком-либо операторе, а процедура вызывается отдельным оператором.

Visual Basic (VBA) функции и процедуры

Процедуры VBA

Процедурам, как и функциям, нужно давать уникальные имена и при необходимости дописывать требуемые параметры.

Передача параметров в процедуру VBA

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

Вот и получается, что VBA дает возможность передавать параметры в процедуру, используя уникальное значение переменной или по ее адресу в оперативной памяти.

  1. ByVal — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по значению переменной.
  2. ByRef — это ключевое слово, которое нужно указывать, если происходит передача параметров в процедуру VBA по ссылке переменной.

Функции в Visual Basic

  1. Математические. Например: Abs, Cos, Exp, Int, Fix, Log, Rnd, Round, Sin и др.
  2. Для преобразования типов и представления данных. Например: Cbool, Cbyte, Ccur, Cdate, Csng. Cvar, Hex и др.
  3. Для работы с массивами. Например: Array, Erase, Lbound, Ubound и др.
  4. Для обработки строк. Например: Asc, Choose, Chr, Error, Filter, Format и др.
  5. Стандартные, для ввода-вывода и работы с цветом. Например: InputBox, MsgBox, QBColor, RGB и др.
  6. Для работы с датой и временем. Например: Date, DateAdd, DateDiff, Day, Hour, Minute и др.
  7. Для работы с папками и файлами. Например: ChDir, ChDrive, Close, FileAttr и др.
  8. Для работы с объектами и приложениями. Например: CallByName, CreateObject, Environ и др.
  9. Функции статуса. Например: IsArray, IsDate, IsError, IsNull и др.
  10. Финансовые. Например: DDB, FV, Ipmt, IRR, MIRR, NPV и др.

Заключение

В Visual Basic (VBA) функции и процедуры, как правило, облегчают работу над подпрограммами, которые вы будете кодить. Поэтому пробуйте и берите на вооружение эти возможности языка, чтобы облегчить свою работу.

Читайте также: