Алексей Анатольевич Гладкий, Александр Анатольевич Чиртик
Excel. Трюки и эффекты

http://www.piter.com/downLoad/978591180547/.

dgurski@minsk.piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение!
   На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.

Глава 1
Краткое руководство по VBA

   Цель данной главы – ознакомить читателя с основами программирования на языке Visual Basic for Applications (VBA), который встроен в пакет Microsoft Office.
   Эта глава по форме изложения скорее похожа на справочник. Она рассчитана на пользователей, имеющих некоторый опыт создания программ на других объектно-ориентированных языках программирования, то есть представляющих, что такое переменная, константа, оператор, цикл, массив, класс, объект и т. д. Главный упор в данной главе сделан на описание синтаксиса и особенностей использования основных конструкций VBA, которые нужно знать для понимания приведенных в тексте листингов.

Знакомство с VBA

   VBA – это язык программирования, поддерживаемый большинством приложений пакета Microsoft Office. Для запуска среды программирования VBA можно использовать сочетание клавиш Alt+F11.

Возможности VBA

   Благодаря высокой степени интеграции в приложения язык VBA позволяет программисту легко применять существующие возможности Microsoft Office для решения специфических задач. Не менее легко VBA позволяет добавлять в приложения этого пакета новые возможности, увеличивая функциональность приложений и удобство работы с ними.
   Применительно к Excel программирование на VBA позволяет реализовывать следующие возможности (естественно, это далеко не полный список):
   • добавление функций для специфических расчетов;
   • ускорение ввода данных в таблицу;
   • автоматизацию типичных, часто выполняемых пользователем действий;
   • создание команд меню, панелей инструментов как на основе уже имеющихся, так и выполняющих совершенно новые действия;
   • повышение наглядности данных (например, с помощью различной окраски ячеек);
   • автоматизацию обработки больших объемов данных;
   • автоматизацию создания разнообразных отчетов, бланков и прочих действий, связанных с выбором заданной информации из большого объема исходных данных.
   Реализация всех этих возможностей при использовании VBA очень часто достигается написанием небольшого количества достаточно простого программного кода.

Структура проекта VBA

   Внешний вид редактора VBА с открытым проектом представлен на рис. 1.1.
   Рис. 1.1. Проект VBA
 
   В редакторе открыты три окна: слева вверху – окно структуры проекта (Project), слева внизу – окно свойств (Properties) и справа – окно с текстом программы модуля. С помощью окна Project (Проект) можно просматривать структуру проекта, добавлять и удалять элементы проекта, открывать для редактирования содержимое модуля (двойным щелчком на значке соответствующего модуля). Окно Properties (Свойства) используется для задания свойств выделенных элементов проекта.
   VBA-проект в Microsoft Excel может содержать следующие элементы:
   • модули (стандартные модули VBA);
   • модули класса;
   • модули рабочей книги;
   • модули рабочих листов;
   • модули диаграмм;
   • формы.
Стандартный модуль VBA
   Стандартный модуль VBA – это элемент проекта, который содержит программный код, непосредственно используемый остальными элементами проекта (глобальные функции, переменные, константы и т. д.). В окне структуры проекта стандартные модули группируются в папку Modules.
   Обычно в стандартном модуле записываются программы, которые не привязаны к конкретным объектам, таким как рабочий лист и рабочая книга. Именно в этом модуле записывается большинство примеров (трюков), рассматриваемых в последующих главах книги.
Модуль класса
   Модуль класса – это модуль, в котором записывается программный код, реализующий работу пользовательских (созданных программистом) классов. В окне структуры проекта такие модули группируются в папку Class Modules.
Модуль рабочей книги
   Модуль рабочей книги (ЭтаКнига в папке Microsoft Excel Objects) – это модуль класса, в котором реализуются дополнительные возможности по манипулированию рабочей книгой. Программы, записанные в этом модуле, могут напрямую обращаться к свойствам и методам объекта рабочей книги (см. описание модулей класса в конце главы). Отличием модуля рабочей книги от обычного модуля класса является то, что из программы на VBA нельзя создать экземпляр объекта рабочей книги – он создается автоматически.
Модуль рабочего листа
   Модуль рабочего листа (папка Microsoft Excel Objects) – это модуль класса, в котором реализуются дополнительные возможности по манипулированию определенными рабочими листами книги. Программы, записанные в этом модуле, могут напрямую обращаться к свойствам и методам объекта рабочего листа. Из программы на VBA также нельзя создать экземпляр объекта конкретного рабочего листа – можно создать только новый рабочий лист с пустым модулем.
Модуль диаграммы
   Модуль диаграммы (папка Microsoft Excel Objects) – это модуль класса, в котором реализуются дополнительные возможности по манипулированию диаграммами, вынесенными на отдельные листы рабочей книги. Особенности модуля диаграммы аналогичны особенностям модуля рабочего листа.
Форма
   Форма (папка Forms) – это элемент проекта VBA, с помощью которого можно создавать диалоговые окна для взаимодействия с пользователем. Форма состоит из двух частей: модуля формы и собственно формы (диалогового окна).
   Модуль формы – это модуль класса, в котором реализуется поведение формы. Использование этого модуля аналогично использованию обычного модуля класса. Для открытия модуля формы служит пункт View Code (Просмотр кода) контекстного меню, которое вызывается щелчком правой кнопки мыши на значке формы в окне Project (Проект).
   Для задания внешнего вида диалогового окна используется редактор форм, который открывается с помощью пункта View Object (Просмотр объекта) контекстного меню. Форма, открытая для редактирования внешнего вида, показана на рис. 1.2.
   Рис. 1.2. Редактирование формы
 
   Для изменения свойств открытой формы используется окно Properties (Свойства). В окне ТооШох (Панель инструментов) можно выбирать элементы управления, добавляемые в форму. После добавления любого элемента управленияс помощью двойнго щелчка кнопкой мыши на нем можно перейти к редактированию соответствующего кода в модуле формы.

Структура модуля VBA

   При разработке любой программы на VBA программный код записывается в одном или нескольких модулях. Код, записанный в любом модуле VBA, имеет следующую структуру.
   1. Объявления переменных, директивы (с использованием ключевого слова Option), объявления API-функций.
   2. Объявления и реализация процедур и функций.

Соглашения, применяемые при описании синтаксиса VBA

   В данном разделе приводится описание элементов, которые используются для формального задания синтаксиса конструкций языка VBA. Сведения об этих элементах приведены в табл. 1.1.
Таблица 1.1. Элементы описания синтаксических конструкций VBA
   Примечание
   Кроме описанных в таблице элементов, при задании формата синтаксических конструкций и в текстах программ используется символ подчеркивания «». Он является стандартным символом VBA. Текст, который заканчивается символом подчеркивания, представляет собой одно целое с текстом на следующей строке.
   Чтобы сказанное выше стало более понятным, ниже приведен пример формального задания синтаксической конструкции языка VBA. В качестве примера взят формат упрощенного объявления локальной переменной (смысл всех элементов данной конструкции будет полностью раскрыт в последующих разделах главы):
   Dim | Static Имя [As Имя_типа][, Имя_переменной [As Имя_типа]]…
   Приведенная запись означает, что строка объявления локальной переменной должна начинаться инструкцией Dim или Static. После инструкции должен следовать идеитификатор переменной. Необязательным элементом конструкции является указание типа переменной. Но если тип указывается, то значение в квадратных скобках (первых) должно быть использовано полностью, то есть ключевое слово As не должно применяться без указания имени типа. Объявления переменных можно продолжить в этой же строке без повторного использования инструкции Dim, но разделяя их запятой (см. вторые скобки). Подобные объявления можно продолжать в строке до бесконечности (об этом говорит использование многоточия после вторых скобок).
   Примеры объявлений переменных, удовлетворяющие указанному формату, приведены ниже:
   Dim intPos As Integer
   Dim varValue, intValue As Integer
   Static strText As String
   Static var1 As Variant, var2 As Variant, var3 As Variant

Комментарии в программе

   В VBA предусмотрены два способа введения комментариев в программы. Первый – это использование ключевого слова Rem для обозначения начала комментария. Второй – использование вместо Rem апострофа (). Главным различием этих двух способов является то, что ключевое слово Rem должно находиться в начале строки программы. При этом вся строка является комментарием. Например:
   Rem Объявление переменной
   Dim intRes As Integer
   Rem Присвоение значения переменной
   intRes = 123
   Комментарий же, вводимый с помощью апострофа, может быть расположен как в отдельной строке, так и на одной строке с другими инструкциями (в конце этой строки):
   ' Объявление переменной
   Dim intRes As Integer
   intRes = 123 Присвоение значения переменной
   Все комментарии в VBA являются однострочными, но при необходимости их текст может быть перенесен на следующую строку с использованием символа подчеркивания:
   ' Длинный комментарий, текст которого не помещается _
   в одной строке
   или
   Rem Длинный комментарий, текст которого не помещается _
   в одной строке

Идентификаторы

   Идентификаторами в VBA являются названия переменных, констант, функций, процедур, классов, типов данных и прочих элементов, не являющихся зарезервированными словами языка (названиями инструкций, операторов, встроенных функций и т. д.).
   Среда разработки VBA поддерживает кодировку символов Unicode. Поддержка данной кодировки разработки означает, что программист может использовать в составе идентификаторов символы любого поддерживаемого алфавита (например, кириллицы).
   При формировании идентификаторов необходимо учитывать следующее.
   • Идентификатор должен состоять только из букв (любого алфавита), цифр и символа подчеркивания.
   • Первым символом идентификатора должна быть буква.
   Внимание!
   VBA не различает регистр символов в идентификаторах. Это значит, что идентификаторы strmyText и strMyText будут представлять одну и ту же переменную. Это же справедливо и для идентификаторов процедур, функций, классов и т. д.
   Рассмотрим примеры корректных идентификаторов VBA:
   strText
   CUSTOM_Data2
   Функция_Суммы
   РасчетПрибыли

Переменные

   В данном разделе читатель ознакомится с основными особенностями использования переменных при написании программ на языке VBA.