19.2. СОЗДАНИЕ ПРИЛОЖЕНИЙ НА ЯЗЫКЕ VISUAL BASIC FOR APPLICATIONS
Характеристика языка VBA Операторы языка VBA
Работа с файлами Диалоговые окна
ХАРАКТЕРИСТИКА ЯЗЫКА VBA
Основные понятия
Visual Basic for Applications (VBA) является общей языковой платформой для всех приложений (Excel 5.0, Word 6.0, Mail, Power Point). VBA соблюдает основной синтаксис и правила программирования языков-диалектов Basic (BASICA, GW-BASIC). Концепция и синтаксис языка VBA рассмотрены в данной главе применительно к Excel 5.0.
Visual Basic for Applications (VBA) – развитая система визуального
программирования для создания прикладных программ в среде
Microsoft Office.
С помощью VBA можно создавать объекты управления графического интерфейса пользователя, задавать и изменять свойства объектов, подключать к ним соответствующий программный код. Методика программирования с использованием средств VBA сводится к следующему:
создание объектов управления и контроля (диалоговые окна, пиктограммы, меню); разработка процедур, используемых при вызове объектов.
Прикладные программы на языке VBA оперируют со следующими понятиями:
объект управления и контроля - экранные формы, графические элементы внутри форм, в том числе текстовые окна, линейки прокрутки, пиктограммы, окна-списки, командные кнопки и др.; свойство (параметр) – характеристика или атрибут объекта управления;
значение свойства; событие – действие, которое распознается объектом управления;
метод доступа - аналогичное понятиям функция, оператор, который воздействует всегда на объект;
процедура – подпрограммы и функции, произвольная последовательность операторов VBA; процедуры делятся на событийные (запускаются при наступлении событий) и общие процедуры.
Программы на языке VBA для приложений, функционирующих в среде Excel 5.0, создаются двумя способами:
вавтоматическом режиме как результат построения клавишной макрокоманды (см. подразд. 19.1);
внеавтоматическом режиме путем создания программного кода.
Ниже рассматривается вариант традиционного программирования на языке VBA применительно к
Excel 5.0.
Для создания программного модуля в составе рабочей книги выполняется команда меню ВСТАВКА, Макрос с указанием типа макроса – Модуль. При этом создается новый рабочий лист со стандартным именем Модуль и порядковым номером программного модуля в рабочей книге. Имя модульного листа можно изменить.
При работе с модулем на экран выводится новая панель инструментов Visual Basic (рис. 19.20).
576
Рис. 19.20. Панель инструментов
Первый ряд кнопок панели (слева направо):
<Вставка Модуля> - вставляет в активную рабочую книгу новый программный модуль; <Редактор Меню> - редактирование строк и команд меню рабочей книги;
<Просмотр Объектов> – просмотр списка доступных в текущей рабочей книге процедур, модулей, объектов и их свойств.
Второй ряд кнопок:
<Выполнить Макрос> - выбор нужного макроса для запуска через окно диалога Макрос; <Шаг Макроса> – пошаговое выполнение выбранного макроса (шаг – одна строка кода); <Продолжить Макрос> – возобновление выполнения макроса после его останова; <Остановить Макрос> – останов выполнения или записи макроса; <Записать Макрос> – ввод через окно диалога Макрос имени нового макроса и его запись.
Третий ряд кнопок:
<Точки Прерывания> – установление (снятие) точки прерывания для строки процедуры; <Наблюдение> – указание в окне диалога выражения VBA для наблюдения его значений; <Вход в Процедуру> – выполнение следующей строки кода процедуры VBA;
<Выход из Процедуры> - выполнение следующей строки кода процедуры VBA с приостановкой. Экран модуля используется для записи строк программы на языке VBA.
Основные наборы (классы объектов), с которыми работает программа на языке VBA в среде Excel 5.0, представлены в табл. 19.3.
Таблица 19.3. Перечень наборов VBA Excel 5.0
Имя набора |
Вид объектов в наборе |
Sheets |
Все листы любых типов в рабочей книге |
Workbooks |
Все текущие открытые рабочие книги |
Worksheets |
Все таблицы в рабочей книге |
Charts |
Все листы диаграмм в рабочей книге |
Range |
Диапазон ячеек таблицы (строк, столбцов, несмежных ячеек, трехмерных |
|
выделений) |
Доступ к компоненту набора осуществляется двумя способами: 1) по номеру компонента
Пример 19.5.
Workbooks("Имя_книги").Worksheets(2)
2) по имени компонента
Пример 19.6.
Workbooks ("Имя_книги").Worksheets ("Имя-лиcтa")
Наборы обладают следующими свойствами:
Count – определяет число компонентов в наборе; Name – определяет имя компонента;
Parent – определяет имя объекта, включающего набор.
Для добавления и удаления компонентов набора используют методы Add и Delete. Отдельные ячейки таблицы доступны через объект Range и следующие методы:
1. Cell – в качестве аргументов указываются два целых числа, определяющих местоположение
577
отдельной ячейки таблицы – Cell (число1; число2)
Пример 19.7.
Cell(l;2).Value=5
Присваивает ячейке В2 текущего рабочего листа активной рабочей книги значение 5;
Cells(2, l).Formula= "=SUM(B1:B5)"
Записывает в ячейку А2 формулу суммирования значений в ячейках В1:В5.
2. Range – работа с прямоугольной областью ячеек, в качестве аргументов используется одна или две ссылки на ячейки таблицы в стиле А1:
Range ("A2";"G10")
Range ("f4")
либо на блок ячеек по их имени.
Пример 19.8.
Worksheets("PRIMTR"). Range("A10"; "F12").Value=10
Присвоение блоку ячеек постоянного значения 10. Range("D15").Value = "Test"
Присвоение ячейке текущего рабочего листа активной рабочей книги значения "Test".
Range("Criteria").ClearContents
Очистка содержимого именованного блока ячеек текущего рабочего листа активной рабочей книги.
Примечание. Можно использовать форму записи
Range(Cells(1; 1); Cells(2; 2)).
3. Offset – в качестве аргументов передаются два числа, указывающие местоположение ячейки относительно верхнего левого угла указанной области. При записи макросов с относительными ссылками макрорекордер использует данный метод для указания выбора.
Пример 19.9.
Selection.Offset(2, 5). Select
Относительно текущей ячейки, например, А1, происходит смещение в ячейку F3.
["Адрес_ячейки"] – краткая ссылка на ячейку по ее адресу.
4. Union – метод множественного выделения областей ячеек – Union (область1; область2). Каждую область формируют с помощью метода Range.
Пример 19.10.
Union(Range(Cells(l; l);Cells(2; 2)); Range(Cells(5; 5); Cells(7; 7)).Select
Выделяет области ячеек: А1:В2, E5:G7.
Встроенные типы данных
VBA использует 11 встроенных типов данных (табл. 19.4).
Boolean использует 2 байта, или 16 бит, памяти для хранения логических данных; имеет два возможных значения: True и False.
Integer использует 2 байта памяти для хранения целых чисел, в том числе 1 бит для хранения знака числа, 15 бит – для числа.
Long использует 4 байта, или 32 бита, памяти для хранения целого числа двойной точности, в том числе 1 бит – для хранения знака числа, 31 бит – для числа.
Single использует 4 байта для раздельного хранения мантиссы (цифровая часть числа – максимум 7 знаков) и порядка (расположение десятичной точки).
Double использует 8 байтов для раздельного хранения мантиссы (максимум 15 знаков) и порядка. Currency использует 8 байтов, десятичная точка всегда располагается между 4 и 5 цифрами справа,
обеспечивает автоматическое округление результатов вычислений.
Date использует 8 байтов и предназначен для хранения дат и времени. Даты записываются в виде целых чисел дней, а время – как дробная часть дня.
String использует 1 байт для хранения 1 символа плюс 1 байт для отметки конца строки. Символы хранятся в виде кодов ANSI.
Object использует 4 байта памяти для ссылки на любой объект Visual Basic. Array определяет список данных любого типа и любой размерности.
Variant используется всегда, когда явно не указан какой-либо другой тип; может соответствовать любому другому разрешенному типу данных.
Таблица 19.4. Встроенные типы данных VBA
Переменные
Переменной называется поименованная область в памяти компьютера во время выполнения программы.
Переменная требует явного объявления своего имени, которое образуют алфавитно-цифровые символы и специальные знаки. Имя всегда начинается с буквы и представляет собой непрерывную последовательность символов, но не более 255 и не содержит специальных символов.
Пример 19.11.
|
Разрешенное имя |
Неразрешенное имя |
Комментарий |
|
переменной |
переменной |
|
|
|
ПРИмер; приМЕР; |
|
Нет различия прописных и |
|
EXAMPLE; example |
|
строчных букв, кириллицы и |
|
|
|
латиницы в написании имен |
|
Тарифная_ставка_1_разряда; |
|
Для улучшения семантики |
|
Tax_off_l_class |
|
переменные могут состоять из |
|
|
|
отдельных слов, соединенных |
|
|
|
знаком _ |
|
Тарифная ставка $; |
Нельзя использовать пробелы в |
|
#room; |
имени переменной, а также |
|
Class&subclass |
специальные символы типа: |
|
|
#$%&! |
Программа на языке VBA имеет модульную структуру – главный модуль, в составе которого вложенные модули, содержащие одну или более вложенных процедур.
Каждая переменная имеет определенный тип значений и сферу действия, в противном случае ей приписывается тип Variant. На рис. 19.21 показана сфера действия переменных.
Рис. 19.21. Сфера действия переменных в программе на языке VBA
Переменные, объявленные только в процедуре, действуют в пределах процедуры. Объявление переменной на уровне модуля делает ее доступной для всех процедур модуля. При этом допускается переопределение имени переменной во вложенных процедурах. Для использования переменной во всех вложенных процедурах и модулях она объявляется глобальной на уровне внешнего модуля (например, переменная Var0 доступна всем вложенным модулям и их процедурам).
Пример 19.12. Переменные var4, var5 используются только в самих процедурах. Переменная var2 объявлена в процедурах 1 и 2. Это
соответствует двум различным переменным с одинаковым именем и своей сферой действия (они имеют разные значения и/или типы данных, независимы друг от друга).
Переменные на уровне модуля, var1 – в модуле 1 и var3 – в модуле 2, используются во всех вложенных в модуль процедурах. Переменная var1 предопределена в процедуре 1, но сохраняет свое значение в процедуре 2; переменная var3 предопределена в процедуре 3.
Переменные в модуле объявляются с помощью операторов различных типов:
локальные переменные
Dim <var> As <type>, <var> As <type>, <var> As <type>, ....
глобальные переменные
Public <var> As <type>, <var> As <type>, <var> As <type>, ....
где <var> – имя переменной;
<type> – встроенный тип данных переменной.
Массивы переменных
Массивы переменных имеют произвольную размерность – одномерные, двухмерные, трехмерные и