Microsoft Excel

трюкиприёмырешения

Основные элементы по VBA в кратком описании

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

При написании процедур мы уже встречались с переменными. Переменная это фрагмент памяти в компьютере, которому мы присвоили имя. Для обращения (записи или считывания информации) к этому фрагменту в программе следует использовать выбранное имя. Для того чтобы в зависимости от требований программы отводить различные области памяти для переменных, существуют типы данных. Когда мы создаем переменную, то сразу указываем (явно или неявно), к какому типу данных она относится. Основные типы данных языка VBA приведены в табл. 1.3. В этой таблице присутствуют как простые типы (Integer и String), так и достаточно сложные (Object и Variant). Переменная типа Object занимает немного места в памяти компьютера — всего 4 байта, однако при этом позволяет работать с такими сложными объектами, как приложение Microsoft Word или 1C:Предприятие 8, из процедур Microsoft Excel. В последующих статьях мы это увидим на примерах.

Таблица 1.3. Основные типы данных

Тип данных Область значений Комментарий
Boolean True (Истина) или False (Ложь) Логическое значение
Byte От 0 до 255 Целое число без знака
Date 01.01.0000 до 31.12.9999 Дата и время
Object 4 байта Ссылка на объект
Integer Короткое целое От -32 768 до 32 767
Variant Любое значение Для хранения переменных любых типов
Long Длинное целое От — 2 147 483648 до 2 147 483 647
String Длина строки от 0 до 64 Кбайт Хранение строковых значений

В VBA существует два способа отведения памяти для переменных.

Первый способ — явный, в этом случае вы указываете с помощью инструкции, тип создаваемой переменной. Синтаксис выглядит следующим образом: Dim Имя_Переменной As Тип_Данных. Здесь Dim и As — ключевые слова языка программирования. В качестве имени переменной вы можете задать любое слово (без пробелов внутри), а о возможных типах данных мы уже сказали. Можно несколько ускорить работу при написании программ — не объявлять переменные. В этом случае при появлении в тексте переменной, которая не была описана с помощью инструкции Dim, она автоматически становится переменной типа Variant и для нее отводится соответствующая память.

Более сложный вид данных по сравнению с переменной — это массив, который представляет собой набор однотипных данных (набор данных определенного типа). Массив, как и переменная, задается именем. При этом каждый элемент массива определяется его индексом. Например, Mass (3) — третий элемент массива с именем Mass. Объявление массива производится аналогично объявлению переменных: Dim Имя_Массива (Граница_Массива) As Тип_Данных_Массива. По умолчанию индексация массивов начинается с 0. Например, в строке Dim Mass (10) As Integer отводится память под массив Mass. При этом в памяти выделяется 11 ячеек — каждая ячейка для хранения данных типа Integer. Для определенности заметим, что для одной переменной типа Integer отводится 2 байта в памяти компьютера.

Поговорим теперь о встроенных функциях и процедурах, которые существенно облетают программирование в среде VBA. Фактически они позволяют программисту быстро оформить стандартные действия. Приведем пояснения по ряду стандартных функций и процедур, которые нам понадобятся далее. Так, для вывода сообщений на экран используется функция MsgBox (сообщение, [кнопки], [заголовок]), где сообщение представляет собой текст, который будет отображен в диалоговом окне. Этот параметр является обязательным, для вывода текста этого сообщения данная функция и существует. Параметр кнопки представляет собой числовое значение, являющееся суммой чисел, определяющих, какие кнопки будут отображены в диалоговом окне. Для каждого варианта кнопок можно использовать либо числа, либо константы VВА, эта информация представлена в табл. 1.4.

Таблица 1.4. Константы функции MsgBox

Константа Значение Комментарий
vbOKOnly 0 Только кнопка OK
vbOKCancel 1 Кнопки OK и Cancel
vbYesNoCancel 3 Кнопки Yes, No и Cancel
vbYesNo 4 Выводятся кнопки Yes и No
vbCritical 16 Critical Message
vbInformation 64 Information Message
vbDefaultButton1 0 Выделяется первая кнопка
vbDefaultButton2 256 Выделяется вторая кнопка
vbDefaultButton3 512 Выделяется третья кнопка
vbApplicationModal 0 Модальность приложения
vbSystemModal 4096 Модальность системы

Необходимое значение параметра кнопки можно получить сложением этих констант. При этом из каждой группы можно указать только одну константу. Если параметр кнопки не указан, то по умолчанию предполагается, что его значение равно нулю: MsgBox (сообщение, 0), что соответствует тому, что выбраны три константы с нулевыми значениями (vbOKOnly, vbDefaultButton1 и vbApplicationModal).

Мы еще не сказали о параметре заголовок, определяющем текст, который будет помещен в строку заголовка диалогового окна. Если заголовок не указан, то выводится заголовок с информацией о приложении, из которого данная функция вызвана. Например, мы можем сформировать окно диалога с тремя кнопками (Yes, No, Cancel) и установкой фокуса (выделения) на третью кнопку. Для этого вызов функции можно оформить следующим образом: MsgBox (сообщение, vbYesNoCancel + vbDefaultButton3).

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

Таблица 1.5. Константы, возвращаемые функцией MsgBox

Константа Значение Нажатая клавиша
vbOK 1 OK
vbCancel 2 Cancel
vbYes 6 Yes
vbNo 7 No

Рассмотрим теперь функцию ввода: InputBox (сообщение, [заголовок], [значение по умолчанию]). Первые два параметра вам знакомые функции MsgBox. Параметр значение_по_умолчанию определяет то значение, которое появляется в поле ввода. Фактически это способ задать при вводе наиболее ожидаемое значение. Если этот параметр опущен, то в поле ввода будет пустая строка. В качестве примера использования данной функции приведем следующую конструкцию: z = Input Box ("Введите число маршрутов", "Начальная информация", 1). В результате перед нами откроется окно ввода с заголовком Начальная информация.

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

Далее в рассматриваемых примерах часто будет использоваться преобразование строки в число и наоборот. Для этого можно воспользоваться стандартными функциями, приведенными в табл. 1.6. Некоторым недостатком функции Val является неопределенность типа числовых данных. Поэтому наряду с ней можно, например, использовать другую стандартную функцию преобразования типов — CInt (выражение), которая позволяет выполнить преобразование выражения в число типа Integer. Существуют аналогичные функции, выполняющие преобразование в другие числовые типы данных.

Таблица 1.6. Функции преобразования типов

Функция Возвращаемое значение
Val Число
CInt Число типа Integer
CStr Строка

Таким образом, в первой части раздела «Офисные решения» мы познакомились с основами программирования в Microsoft Excel на примерах несложных разработок, связанных с наиболее популярными элементами ActiveX и событиями, относящимися к этим элементам. Как правило (за исключением нескольких примеров), создаваемые элементы управления и сам рабочий лист, на котором oim располагались, не взаимодействовали друг с другом. В определенной степени такой подход правилен — для лучшего восприятия новые технические моменты следует рассматривать поэтапно. И уже в следующих статьях мы рассмотрим, каким образом процедуры VBA могут обмениваться информацией с листами Microsoft Excel.

Top