Учебно-методические материалы для студентов кафедры АСОИУ

Модули VBA

Любая программа на VBA представлена в виде проекта. Проект - это совокупность программных модулей различных типов. В свою очередь модуль - это основная программная единица уровня проекта, в которой размещаются определения переменных, констант, типов, подпрограмм и т.д.

Visual Basic поддерживает три типа модулей, которые могут быть включены в проект и использованы:

Структура модуля VBA включает два неявных (т.е. не требующих специального описания) раздела: общий (General) и объявлений (Declarations). В общем разделе задаются параметры среды (Option Base, Option Explicit), приводятся описания глобальных переменных, констант и типов. Раздел объявлений предназначен для описания процедур и функций.

Области видимости

VBA поддерживает две области видимости для переменных и подпрограмм: локальную и глобальную.

Локальные переменные определены на уровне подпрограммы с помощью ключевых слов Dim или Static. Они доступны только внутри этой подпрограммы и по выходу из нее уничтожаются. Глобальные переменные объявляются на уровне модуля. Такие переменные доступны:

Подпрограммы VBA могут быть объявлены на двух уровнях – уровне проекта (Public) и уровне модуля (Private). Например:
Public Sub Query(price, count) ' видимость на уровне проекта Private Sub Sub Query(price, count) ' видимость на уровне модуля 

По умолчанию используется уровень проекта.

При описании локальных переменных можно использовать ключевое слово Static. Такие переменные являются статическими и сохраняют значения между вызовами.

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

В языке программирования VBA предусмотрено несколько десятков встроенных функций. Они доступны в любой программе на языке VBA, при этом безразлично, в среде какого программного продукта мы находимся — Excel, Word, Access или, к примеру, AutoCAD. Используются они очень активно, и во многих ситуациях без них не обойтись. Встроенные функции обычно группируют по назначению: математические, строковые, преобразования типов, логические и т.п. В справке по VBA имеется подробная информация о всех встроенных функциях. Здесь же приведем краткое описание только некоторых.

Функции приведения типов

Используются для конвертации типов данных. Вот перечень этих функций: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Просмотреть, что в итоге получилось, можно при помощи функции TypeName(), например:

nVar1 = CInt(InputBox("Введите значение"))
MsgBox TypeName(nVar1)  

Кроме того, еще несколько полезных для конвертации функций:

Чтобы не возникло ошибок при конвертации, можно вначале проверять значения на возможность конвертации при помощи функций IsNumeric() и IsDate(). Для проверки на соответствие специальным значениям можно использовать функции IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() и IsObject(). Все эти функции возвращают True или False в зависимости от результатов проверки переданного им значения.

Строковые функции

Математические функции

Функций для работы с числовыми значениями в VBA очень много. Приведем только некоторые из них.

Функции для работы с датой и временем

Основные функции VBA для работы с датой/временем:

Функции взаимодействия с пользователем

Для организации диалога с пользователем VBA представляет две встроенные функции - MsgBox и InputBox. Окно сообщений MsgBox выводит сообщения для пользователя, а окно ввода InputBox обеспечивает возможность получения информации от пользователя.

Функция MsgBox() выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.

Формат функции MsgBox:

MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context]) 

Назначение параметров:

Простой пример использования функции MsgBox:
Sub sample3() MsgBox "Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение" End Sub 

В данном примере MsgBox применяется не в виде функции, а в виде процедуры (т.е. не возвращает никакого значения). Следовательно, код выбранной кнопки нигде не сохраняется и не может быть использован. Чтобы определить, какая кнопка была нажата, MsgBox необходимо вызвать как функцию, т.е. сохранить возвращаемое значение в переменную (Листинг 17.

Листинг 17. Использование MsgBox

Sub sample4() Dim res ' объявляем переменную ' вызываем MsgBox и сохраняем значение в переменной res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение") Debug.Print res ' печатаем полученное значение End Sub 

При выполнении этого макроса, когда пользователь выбирает кнопку Yes или No в переменной res сохраняется число, соответствующее выбранной кнопке.

Вместо возвращаемых функцией MsgBox целочисленных значений удобнее пользоваться предопределенными константами VBA. В таб. 11 приведены возвращаемые значения констант функции MsgBox.

Таблица 11. Возвращаемые значения функции MsgBox

Константа Означает, что пользователь нажал кнопку
vbAbort Стоп (Abort)
vbCancel Отмена (Cancel)
vbIgnore Пропустить (Ignore)
vbNo Нет (No)
vbOk Ок
vbRetry Повтор (Retry)
vbYes Да (Yes)

Дополним код листинга 17 проверкой возвращенного значения (листинг 18).

Листинг 18. Проверка возращаемого значения MsgBox

Sub sample5() ' вызываем MsgBox и сохраняем значение в переменной res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение") ' проверяем, какая кнопка нажата If res = vbYes Then : MsgBox "Вы нажали Yes", , "Результат выбора" Else : MsgBox "Вы нажали No", , "Результат выбора" End If End Sub 

Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста, а затем возвращает значение типа String, содержащее текст, введенный в поле. Формат функции InputBox:

InputBox (Prompt [, Title] [, Default] [, XPos] [, Ypos] [, HelpFile, Context]) 

Назначение параметров:

Приведем пример использования функции InputBox для получения имени пользователя.

Sub sample6() Dim username As String username = InputBox("Введите ваше имя ", "Пример 6") MsgBox ("Здравствуйте, "+username) End Sub 

В результате выполнения этого макроса на экран последовательно выводятся диалоговые окна ввода и вывода (рис. 5).


Рис. 5 Интерактивные функции VBA

CC-BY-CA Анатольев А.Г., 29.09.2012