Посмотреть - Уральский государственный лесотехнический

Министерство образования и науки Российской Федерации
Федеральное государственное образовательное учреждение
высшего профессионального образования
Уральский государственный лесотехнический университет
Институт экономики и управления
620100 Екатеринбург, Сибирский тракт, 37, оф. 1-136
Тел.
+7 (343) 262-96-06
Сайт: http://itim-usfeu.ru/
Конспект лекций
Б3.В.8 «Программирование в пакетах MS Office»
Направление: 38.03.08 Бизнес-информатика
Профиль подготовки: Электронный бизнес
Квалификация: бакалавр
Форма обучения: очная, очно-заочная, заочная(5 лет), заочная (3года)
Выпускающая кафедра: информационных технологий и моделирования
Разработал: доцент кафедры ИТиМ Карасева О.А
Екатеринбург 2014
1
Оглавление
Офисное программирование .......................................................................................................................... 2
Тема 1. Основы объектно-ориентированного подхода к проектированию и разработке программ ...... 5
Тема 3. Основные принципы объектно-ориентрованного и визуального программирования. Классы и
объекты, поля, свойства, методы, события. .................................................................................................. 7
Тема 4.Основы языка программирования VBA ...........................................................................................11
Объекты Excel ................................................................................................................................................13
Получение и установка свойств ...................................................................................................................13
Вызов методов ...............................................................................................................................................14
Единичные объекты и семейства объектов ...............................................................................................14
Использование переменных в подпрограммах .............................................................................................15
Тема 5. Форма: свойства и методы формы, события, организация реакции на них. ..............................20
Режим конструктора ..................................................................................................................................20
Установка свойств элементов управления ...............................................................................................20
Элемент управления CommandButton ......................................................................................................21
Элемент управления CheckBox .................................................................................................................21
Элемент управления OptionButton ............................................................................................................21
Элемент управления ToggleButton ...........................................................................................................21
Элемент управления ListBox .....................................................................................................................21
Элемент управления ComboBox ...............................................................................................................22
Элементы управления ScrollBar и SplinButton ........................................................................................22
Элемент управления TextBox ....................................................................................................................22
Тема 6. Событие, обработчик события, создание и использование. ........................................................22
Написание кода обработки событий для элемента управления .............................................................22
Тема 7. Разработка приложений с графическим интерфейсом для MS Excel ...........................................23
Тема 8. Разработка приложений с графическим интерфейсом для MS Word ..........................................32
Создание приложений VBA в Word, типичные ситуации ......................................................................32
Офисное программирование
Впервые этот термин появился в книге В.А. Биллиг, М.И. Дехтярь "VBA и
Office 97. Офисное программирование". Начнем разговор об офисном
2
программировании со следующих определений. "Программирование - это
создание программ" - так говорили мы вчера. "Офисное программирование это создание документов" - говорим мы сегодня. Документ становится
первичным, и программа - лишь его часть. Конечно, изменилось само понятие
"документ".
Теперь
он
понимается
скорее
как
объект
в
объектно-
ориентированном программировании - собрание данных разного типа и
программ, их обрабатывающих. Под документами Office мы понимаем
документы разных типов - рабочие книги Excel, базы данных Access, подшивки
Binder и презентации PowerPoint. Конечно, сюда же относятся и документы
Word. С любым из этих документов связываются и данные и программы.
Например, создавая документ в редакторе Word, можно ограничиться
созданием его данных - набором некоторого текста. Но и в этом простейшем
случае созданный документ связан со многими стандартными программами,
применимыми к нему: проверки орфографии, форматирования и другими. Чаще
всего документ Word устроен сложнее - кроме текстов, он включает рисунки,
клипы, таблицы, диаграммы, и к нему применимы как стандартные, так и
специальные программы, учитывающие его специфику.
Термин
"офисное
программирование"
будем
применять
к
любой
деятельности по созданию документов в среде Office. Речь будет идти о
создании программ на VBA, обрабатывающих данные документа. Вместе с тем
такие средства Office, как, например, Excel, предоставляют программисту
огромные возможности по обработке его документов, не прибегая к
традиционному программированию. Его набор функций обработки финансовой
информации, мощные средства для проведения статистического анализа,
возможности по решению задач оптимизации, не говоря уж о более
традиционных средствах работы с электронными таблицами.
Целью разработчика является создание исходного документа с широким
спектром функциональных возможностей. В дальнейшем с документом должен
3
работать пользователь, цель которого - получение новой информации как
результат работы с документом.
Документ
предполагает
создание
хорошо
организованных,
структурированных данных, но важно и то, что документ должен быть "живым"
- с его данными можно работать, анализировать, изменять и получать новые
данные в процессе работы. Все создаваемые программные компоненты
документа объединяются в одно целое, называемое проектом. Проект является
частью документа и не существует вне его. Он хранится вместе с документом,
его невозможно отделить от документа. Невозможно создать независимый от
документа проект на VBA.
В чем же преимущества офисного программирования? Вот только
некоторые из тех, что получает конечный пользователь:

Пользователь всегда работает в единой офисной среде независимо
от того, с каким документом он работает в данный момент и какой
программист разрабатывал этот документ.

Большинство доступных при работе с документами функций
являются общими для всех документов, поскольку их предоставляет сама
офисная среда. Здесь же отметим единый стиль интерфейса разных
документов.

Пользователь сам, не будучи программистом, способен создавать
простые
виды
документов,
постепенно
совершенствуясь
в
этой
деятельности.

Идеи визуального и событийно-управляемого программирования
получают в офисном программировании свое естественное развитие, а
значит, пользователь в полной мере берет в руки управление своим
документом. Программист, предоставляя средства обработки документа,
может даже и не подозревать, чего может добиться с их помощью
пользователь, понимающий в своем деле.
4
А есть ли преимущества у программиста, работающего в Office? Есть, и их,
пожалуй, не меньше, чем у пользователя:

В его распоряжении мощная интегрированная среда: большинство
повседневных задач становятся для него простыми, - чтобы их решить,
зачастую достаточно стандартных средств.

Там, где стандартных средств не хватает, доступен
язык
программирования - VBA, существенная особенность которого возможность работы с объектами любого из приложений.
Если говорить о сложных задачах, то, естественно, есть такие задачи, для
которых стандартных средств Office и языка VBA недостаточно. Вообще
должны
одновременно
существовать
различные
программные
среды,
операционные системы, любимые теми или иными программистами. Лучшая
позиция программиста должна состоять не в противопоставлении, а в
сотрудничестве. Именно поэтому мне кажутся важными идеи компонентного
программирования, где вырабатывается стандарт взаимодействия компонент,
создаваемых в разных программных средах, на разных языках, на разных
платформах и находящихся на разных машинах.
Тема 1. Основы объектно-ориентированного подхода к
проектированию и разработке программ
Объектно-ориентированное программирование стоит на трех китах:
o
Инкапсуляции объектов.
o
Наследовании свойств и поведения объектов.
o
Полиморфизме объектов.
5
Инкапсуляция (или упрятывание информации) означает разделение
внешних аспектов объекта (его интерфейса, "лица"), которые доступны другим
объектам, от внутренних деталей его реализации (его "кухни"), которые
прячутся от других объектов. Инкапсуляция предохраняет программу от
влияния малых изменений в программе на ее остальную часть. К примеру,
реализация объекта с целью улучшения производительность или исправления
ошибок может быть изменена без изменения других объектов. Инкапсуляция не
является уникальной особенностью объектно-ориентированного подхода,
однако, объединение структуры данных с процедурами в единую сущность
делает инкапсуляцию более мощной, чем в других методологиях.
Однако,
важнейшим
программирования,
которое
свойством
и
отличает
объектно-ориентированного
его
от
просто
объектного
программирования, является наследование свойств и поведения объектов,
являющееся
механизмом
реализации
отношения
обобщения
или
классификации объектов. Предшествующие методологии программирования
различали только структурную иерархию объектов в форме отношений состава
и использования и не видели типовую, классовую иерархию объектов, т.е. их
родовидовых отношений или отношений обобщения-детализации. Многие
объекты реального мира относятся к одному виду и имеют общие
характеристики и поведение, далее они по соответствующему признаку
классификации детализируются и добавляют новые характеристики и
добавляют и/или модифицируют поведение. Вот оно реальное воплощение
экономии и повторной используемости программного кода. Общие атрибуты и
методы определяются на максимально возможном уровне и распределяются по
всему дереву иерархии классов. Объект класса потомка обладает всеми
свойствами
и
специфические
методами
свойства
родительских
и
добавляет
классов
и/или
плюс
добавляет
модифицирует
свои
поведение
наследуемых методов.
6
Полиморфизм - это фактически следствие свойства наследования.
Полиморфный в переводе с греческого означает много форм. Технически это
означает, что специализированные объекты-потомки и родительские объекты
имеют одноименные синтаксически и семантически методы (к примеру,
рисовать для геометрических фигур), реализующие собственные различные
операции
объекта
или
дополняющие
в
чем-то
наследуемые
методы.
Принципиально это означает, что объект родительского класса может
выступать в роли любого из объектов классов потомков, принимая их обличье и
становясь тем самым полиморфным. Когда он в роли одного потомка его
одноименный метод реализуется методом данного потомка.
Тема 3. Основные принципы объектно-ориентрованного и
визуального программирования. Классы и объекты, поля, свойства,
методы, события.
Метод
визуального
программирования
(ВП)
-
это
новый
метод
программирования, который кардинально изменил все представления о
процессе разработки программ для Windows. В отличии от традиционных
процедурных или даже объектно-ориентрованных (но не визуальных) языков
программирования методы визуального программирования сделали процесс
разработки программ для Windows достаточно приятным и легким занятием, а
разработку простых приложений возможным даже для непрофессионалов.
Языки визуального программирования объединили, воплотили в себе и
обеспечили
поддержку
всех
новейших
достижений
методологии
программирования. Методологически визуальное программирование в полном
объеме это:
1. Событийно-зависимое управление плюс
2. Визуальное сборочное программирование плюс
3. Объектно-ориентированное программирование плюс
7
4. Интеграция
практически
полного
спектра
инструментария
(процедурных и баз данных ЯП), технологий (локальной, сетевой,
клиент-серверной)
и
разнородных
информационных
сред
(текстовой, графической, табличной, баз данных, мультимедиа,
коммуникационной).
Итак, первое кардинальное изменение - переход от последовательного
управления и процедурного программирования к событийно-зависимому
управлению и объектному программированию.
В процедурных последовательно-управляемых системах типа DOS
управление размещается внутри программного кода. Программный код
выполняется линейно, т.е. начинается в начале программы и продвигается в
конец, проходя по коду строка за строкой, ветвясь и зацикливаясь и для
взаимодействия с пользователем и внешними устройствами процедуры
запрашивают ввод, точнее ОС, и ожидают его поступления; при поступлении
ввода управление возобновляется внутри ожидающей процедуры, которая
анализирует поступившие данные и вызывает для их обработки прикладную
процедуру оператором Call и для продолжения своей работы ожидает возврата
управления. Это синхронное однопоточное последовательное управление,
реализуемое стеком вызова процедур и программным счетчиком. Для
реализации гибкого пользовательского интерфейса и имитации работы и
функционирования объектов реального мира такая парадигма управления не
подходит.
В реальном мире все объекты (люди, машины, понятия) естественным
образом
существуют
и
функционируют
параллельно,
одновременно,
синхронизируя свою деятельность посредством передачи сообщений о
происходящих событиях. Объекты вокруг нас и каждый является целостной
сущностью, он стоит в центре всего. Объект обладает индивидуальностью
(отличим друг от друга) и автономностью, состоянием (набором свойств или
8
атрибутов, значения которых в совокупности определяют его характеристики и
реакции на поступающие события) и поведением (операциями, называемыми
его методами, которые он умеет выполнять и которые определяют его
функциональность). Состояние объекта определяет на какие поступающие
события он реагирует и способ его реакции.
Объекты - это актеры, действующие лица, имеющие свой жизненный цикл,
сценарий деятельности и воздействовать друг на друга они могут прежде всего
по принципу "стимул-отклик".
Событие - это сигнал о том, что что-то произошло, к примеру, нажатие
кнопки. События передают информацию между объектами в форме сообщений,
аргументами которого являются данные о событии (координаты мышки в окне).
Событие может и не нести информацию: возникновение события и будет
информацией. События реализуют асинхронное управление системой. Они по
своей
природе
однонаправлены.
Объект-источник посылает
сообщение
другому и не ожидая возврата продолжает свою деятельность. Объектприемник принимает событие выполняет в ответ какое-либо действие, но он
самостоятелен и независим от другого объекта; он может послать обратное
сообщение, а может и нет. Объект, принимая событие, возвращает управление
диспетчеру сообщений, не ожидая поступления какого-либо ввода - это будет
уже другое событие.
Событийно-управляемую,
основанную
на
сообщениях,
архитектуру
реализует ОС Windows. Запущенная программа просто ждет, чтобы ей послали
сообщение и затем реагирует на него соответствующим образом. Windows сам
обнаруживает пользовательский ввод, будь-то нажатие клавиши, перемещение
мышки или сигнал от любого другого устройства. Когда происходит событие
подобного типа Windows посылает предварительно определенное сообщение
программе, говоря ей что произошло. Программы просто ждут, чтобы им
послали сообщение и могут игнорировать их или реагировать на них, а также
9
сами посылать сообщения. Программы имеют гнезда, "дырки", через которые
события могут приниматься программой и через них выставляют свои
обработчики интересующих их событий. Они возвращают управление Windows
не ожидая каких-либо вводов пользователя. Это программы направляемые
событиями. Событийно-управляемые системы реализуют метафору "рабочего
стола" и эмулируют кооперирующиеся процессы, множество одновременно
запущенных программ, каждая из которых выполняется в своем окне и может в
любой момент по желанию пользователя (или программы) стать активной.
Событийное управление меняет парадигму программирования. Теперь у
нас нет отдельно программного кода и данных, а есть их неделимое целое программные объекты. Они инкапсулируют в себе, скрывая от других объектов,
свои данные и операции и реализуют видимый извне интерфейс в виде
активных свойств (установка значения цвета заполнителя фигуры как зеленого
одновременно изменяет ее цвет на экране) и методов класса объекта. Внешнее
управление
систем
является
асинхронным,
событийно-управляемым
пользователем системы и требует реализации программ направляемых
событиями, т.е. как отклики программных обработчиков событий.
Суть событийно-ориентированного или объектного программирования
состоит в создании процедур обработчиков событий или событийных методов,
которые откликаются на события. Когда событие выпрыгивает из своих "дыр"
оно ищет процедуру, которую вы подготовили для обработки этого события и
она
реализует
функциональность
вашего
приложения.
Если
нужного
событийного метода нет, то выполнение просто возвращается обратно, не
сделав совсем ничего.
В визуальном программирование происходит крутой поворот в парадигме
программирования и стиле программного мышления, по сравнению с которым
прежний
переход
от
бессистемного
кодирования
к
структурному
программированию кажется просто игрушкой. Структурное программирование
10
никто не отменяет - это просто нижний слой объектно-ориентированного
программирования. По сути объектно-ориентированное программирование
является его дальнейшим развитием. Это уже структуризация не только кода
процедур, но и данных и операций по объектам, которые ближе соответствуют
структуре
приложения
модульность
и
и
обеспечивают
соответственно
большую
понятность,
и
более
логичную
расширяемость
и
модифицируемость кода.
Тема 4.Основы языка программирования VBA
VBA – это фактически результат внедрения первого визуального средства
разработки Microsoft – языка Visual Basic – в электронную таблицу Excel (и
другие приложения Microsoft Office). Он обеспечивает полный доступ из
программ пользователя ко всем функциям анализа данных. имеющимся в
электронной таблице.
Если мы рассмотрим Excel, как средство разработки информационных
систем, то весьма важно понять, что Excel – это не просто электронная таблица.
Excel содержит также мощную библиотеку, которая включает свыше ста
объектов для обработки данных. С помощью VBA разработчики могут
объединять объекты Excel с целью создания развитых информационных
систем. Поскольку объекты Excel имеют широкую область применения,
разработчики могут создавать гибкие системы так, что каждая система
удовлетворяет требованиям многих пользователей. Excel также поддерживает
механизм OLE и является как сервером, так и клиентом Animation. Такая
поддержка механизма OLE позволяет разработчикам легко интегрировать
объекты Excel в системы, созданные на базе других инструментальных средств.
Проектирование информационной системы требует внимательного анализа
планируемых к использованию средств для ее разработки. Excel годится для
любой информационной системы, содержащей анализ данных, т. к. включает
11
набор объектов для разработки данных, который является одним из наиболее
передовых на рынке.
Используя
объекты
Excel
можно
встраивать
созданный
этими
специалистами код в свои приложения, что позволяет получать более мощные
приложения с меньшими усилиями.
Программа VBA в Excel состоит из подпрограмм VBA. Существует два
типа подпрограмм: процедуры и функции. Подпрограмма -
это основной
строительный блок приложений VBA, т. е. отдельный сегмент кода,
содержащий несколько операторов VBA.
Процедура создания программы в VBA состоит в следующем. Откройте в
Excel новую пустую рабочую книгу и загрузите редактор Visual Basic (VBE).
Окно Редактора VBE, которое имеет следующие основные компоненты:
1. Окно проекта – содержит иерархический список элементов
пользовательского проекта VBA. Это могут быть объекты Excel
высокого уровня, такие как рабочие листы, диаграммы и объект
ThisWorkbook (ссылка на рабочую книгу, в которой находится
проект). Список может также включать модули, классы модулей
(специальный тип модуля, позволяющий разработчику определять
собственные объекты) и пользовательские диалоговые окна.
2. Окно свойств – позволяет просматривать и устанавливать свойства
различных объектов проекта.
3. Окно редактора кода – место ввода и редактирования кода VBA. Два
раскрывающихся списка помогают ориентироваться в программе.
4. Окно редактора пользовательских форм – позволяет создавать
пользовательские диалоговые окна, помещать на них элементы
управления ActiveX и тестировать их.
5. Окно просмотра объектов – помогает находить и использовать
объекты, необходимые пользовательским приложениям. Для вывода
окна можно использовать команду Вид, Просмотр объектов.
6. Окно отладки, окно локальных переменных и окно контрольных
значений – все эти окна помогают при отладке программы. Каждое
можно вывести с помощью команд меню Вид.
На экране не будет некоторых элементов окна, пока нет модулей с кодом.
Вставка модуля VBA осуществляется командой Вставка, Модуль. После
чего появится новый пустой модуль. Имя нового модуля отобразится и в окне
проекта.
12
Ввод и запуск подпрограмм VBA. Подпрограмма VBA должна начинаться
с ключевого слова Sub и заканчиваться ключевым словом End Sub.
Символ продолжения строки в VBA. В языке VBA символ ( _) – пробел с
подчеркиванием, говорит о том, что код будет продолжаться на следующей
строке. Одна строка кода может содержать до 1024 символов, но разбиение
строки может сделать код более читаемым.
Объекты Excel
Объект в Excel – это нечто такое, что можно программировать или, по
существу, чем можно управлять. Объектная модель в Excel содержит более 100
встроенных объектов и несколько объектов, совместно используемых всеми
приложениями Microsoft Office.
В данном методическом указании рассмотрены 47 объекта Excel:
Application, Workbook, Worksheets и Range. Эти объекты наиболее часто
используются в Excel, поэтому знакомство с ними необходимо для
дальнейшего понимания материала.
Все объекты Excel имеют так называемые "свойства" и "методы", а VBA
является инструментом, посредством которого можно управлять объектами
Excel с помощью их свойств и методов. Для создания пользовательского
приложения в Excel нужно владеть как самими понятиями объектов, свойств и
методов, так и специфическими деталями относительно свойств и методов этих
объектов.
Соглашение об именах при работе с VBA. В тексте программ на VBA
название объекта, свойства, метода или события записывается одним словом
(например, объект OptionButton). Кроме того, все такие названия начинаются с
заглавной буквы, а если оно состоит из двух слов и более, соединенных в одно,
то вторая составляющая также начинается с заглавной буквы.
Получение и установка свойств
Используя VBA можно выполнить два типа действий со свойствами.
Можно получать свойство (т. е. получать ранее установленное значение
свойства) и можно устанавливать свойство (т. е. устанавливать значение этого
свойства). При выполнении как того, так и другого действия нужно указывать
имя объекта и название свойства, отделяя их друг от друга точкой (.). Далее
можно получать и устанавливать свойство, используя операцию (=). Например,
13
чтобы установить свойство Author рабочей книги КНИГА1.XLS, можно
использовать следующий оператор VBA:
Workbooks("КНИГА1.XLS").Author = "Иванов Александр"
Вызов методов
В VBA синтаксис вызова методов отличается от синтаксиса установки и
получения свойств. Все, что необходимо для вызова метода – это указание
объекта и метода. Кроме этого, большинство методов в Excel имеют набор
аргументов, т. е. дополнительных блоков информации, которые служат для
уточнения того, как должен быть выполнен метод. В VBA многие методы
имеют необязательные аргументы, т. е. в зависимости от того, как нужно
выполнить данный метод, можно задать только некоторые из аргументов или
не задавать аргументов вообще
Пример текста программы на VBA с использованием метода Close без
аргументов
Workbooks("КНИГА1.XLS").Close
Единичные объекты и семейства объектов
Ссылка на объект возможна двумя способами: можно дать прямую ссылку
на единичный объект или можно сослаться на индекс в семействе объектов.
Семейство можно определить как группу объектов. Все объекты Excel можно
разделить на два класса: единичные объекты и объекты, принадлежащие к
семействам. На единичные объекты ссылаются непосредственно по имени. На
объекты в семействе ссылаются по индексу в семействе. Примерно половина
объектов Excel – это единичные объекты, а остальные – объекты из состава
семейства.
Рассмотри пример прямой ссылки на объекты:
Application.Caption = "Мое приложение"
Пример ссылки на объекты из семейства:
Worksheets(1).Name = "Мой первый лист"
При указании индекса для конкретного объекта Worksheet из семейства
Worksheets не забывайте указывать множественное число "Worksheets". Для
большинства семейств в Excel следует использовать множественное число.
Исключения – семейства Range и SeriesCollection.
14
Использование переменных в подпрограммах
Переменная должна быть описана до того, как она будет использована,
поэтому описания переменных располагаются в самом начале подпрограммы
или модуля VBA.
Пример использования оператора Dim в описании переменной:
Dim Var1 As Integer
Комментарий необходимо начинать с символа " ' ", при занесении его в
окно модуля, он будет зеленого цвета. Если комментарий из нескольких строк,
то каждая строка начинается с символа " ' ".
Явное описание переменных. VBA предоставляет возможность явного
описания переменных, предохраняющую от случайного пропуска описаний
переменных и недостатков, связанных с использованием переменных типа
Variant. Можно применять указанную возможность двумя способами:
поместить в раздел описаний (т. е. в верхнюю часть) каждого модуля VBA
оператор Option Explicit (он должен предшествовать всем процедурам и
функциям).
Константы
–
это элементы, не меняющие свое значение во время
исполнения подпрограммы. Константы в VBA подобны константам в других
языках программирования. Способ их описания похож на способ описания
переменных с одним исключением:
присваивание значения константе
производится в том же операторе, где и описание. После описания значение
константы нельзя изменить – любая попытка сделать это приведет к ошибке
времени выполнения. Пример описания константы:
Const Minval As Integer = 1
Описание массивов
Массивы используются во многом так же, как обычные переменные.
Сначала в программе массив необходимо описать и задать тип значений его
элементов. Обратите внимание, что массив может содержать только данные
простого типа. Это ограничение, однако, можно легко обойти, описав массив из
элементов типа variant, что позволяет хранить в массиве элементы любого
15
типа. Типы данных для элементов массива в точности те же самые, что и для
переменных VBA. Рассмотрим пример описания одномерного массива целого
типа:
Dim NumberArray(10) As Integer
Нетрудно заметить, что это описание похоже на описание переменной с
одним исключением: сразу после имени, используемого в описании,
указывается заключенное в круглые скобки число. Значение (или значения) в
круглых скобках сразу после имени дает информацию о структуре массива. В
приведенном примере наличие только одного числа указывает на то, что массив
одномерный; число 10 показывает, что в массиве может храниться 10
элементов типа Integer. Это число показывает верхнюю границу массива
(предполагается, что нижняя граница- это 1).
Описание двумерного массива выглядит таким образом:
Dim TablArray(10, 20) As String
Массив Tablearray состоит из 10 строк и 20 столбцов, т. е. он может
хранить 10 строковых значений. И еще пример – описание трехмерного массива
переменных типа Variant:
Dim BigArray(5, 15, 100) As Variant
Массив BigArray составлен из 5 таблиц, каждая из которых имеет по 50
строк и по 100 столбцов, что означает, что массив может хранить до 25
значений типа Variant.
Оператор Option Base. Обратите внимание, что VBA позволяет устанавливать
нижнюю границу массива (номер первого индекса) по умолчанию либо в 0
либо в 1. Эта установка производится с помощью оператора Option Base, а
именно: Option Base 0 делает нижнюю границу по умолчанию равной нулю, а
Option Base 1 – соответственно 1.
Динамические массивы
VBA поддерживает два типа массивов: динамические массивы и массивы
фиксированных размеров. Все выше рассмотренные массивы – массивы
фиксированных размеров, размеры которых задавались в операторах описания
массива. При описании динамического массива размер массива не задается –
его можно описать в любой момент при выполнении модуля.
16
Динамические массивы имеет смысл использовать, когда известно, что
размер массива может измениться во время выполнения программы.
Область действия переменных
В VBA существуют три уровня действия областей действия переменных:
- уровень процедуры;
- уровень модуля;
- уровень проекта.
Эти три уровня применимы и к массивам. Отметим также, что по
умолчанию описания типов данных, определенных пользователем, которые
должны располагаться в разделе описаний модуля VBA, имеют область
действия уровня проекта, т. е. описаниями можно пользоваться внутри всей
рабочей книги.
Переменная имеет уровень действия процедуры, если описана в теле
подпрограммы с использованием ключевого слова Dim.
Переменные с областью действия уровня модуля доступны в любой
подпрограмме модуля, в котором описана переменная. Ее описание нужно
поместить в раздел описаний модуля VBA , перед описанием всех процедур и
функций.
Переменные с областью действия уровня проекта описываются с
применением ключевого слова Public, описание такой переменной также
должно размещаться в разделе описаний любого модуля проекта.
Public Var3 As String
Операторы управления
В VBA существует несколько операторов управления ходом выполнения
программы. Эти операторы функционально эквивалентны аналогичным
операторам других языков программирования и дают пользователю
возможность создания достаточно сложных и в то же время мощных и гибких
процедур. Исключением является оператор, который есть только в Visual Basic
и VBA – оператор For-Each-Next. Наиболее часто используемые операторы
VBA:
If-Then-Else
Проверяет условие и меняет ход выполнения программы
в зависимости от результатов проверки
17
For-Next
Выполняет повторяющиеся действия заданное число раз
While-Wend
Выполняет повторяющиеся действия, пока справедливо
заданное условие
Do-Loop
Выполняет повторяющиеся действия, пока справедливо
заданное условие или до тех пор, пока заданное условие
не будет выполнено
Select Case
Выбирает один из возможных вариантов выполнения
программы в зависимости от значения переменной или
результатов проверки
For-Each-Next
Выполняет повторяющиеся действия для каждого
объекта в семействе или для каждого элемента массива
Оператор With
Оператор With позволяет применять более короткие ссылки на объекты.
Операторы With имеют три преимущества: они уменьшают количество
набираемого
кода,
делают
его
более
читаемым
и
повышают
производительность программы.
Функции
В VBA, как говорилось выше, используются два типа подпрограмм:
процедуры и функции. В данном разделе перейдем к рассмотрению функций.
Функции похожи на процедуры, есть лишь три главных отличия:
1. Все функции начинаются с ключевого слова Function и
заканчиваются ключевыми словами End Function.
2. Функции можно вызвать из формул, вводимых в ячейках
рабочего листа.
3. Функции могут возвращать значение в подпрограмму или в
формулу куда они были вызваны.
Рассмотрим пример функции, возвращающей произведение двух чисел:
Sub Mod1Proc25_CallFunction()
Dim Var1 As Integer
Dim Var2 As Integer
Dim Var3 As Integer
Var1 = 5
18
Var2 = 10
Var3 = Multiply(Var1, Var2)
MsgBox Var3
End Sub
Function Multiply(ByVal Var1, ByVal Var2)
Multiply = Var1*Var2
End Function
В этом примере Multiply – функция, возвращающая произведение двух
аргументов. Во 2-й строке этого кода произведение аргументов присваивается
имени функции. Такой оператор задает возвращаемое значение функции.
Другие полезные функции и операторы
Приведем еще несколько заслуживающих внимания операторов и функций:
Abs
CurDir
Date
Exit Do
Exit For
Exit Function
Exit Sub
Fix
Int
IsArray
IsDate
IsEmpty
IsError
IsNull
IsNumeric
IsObject
Len
Now
Shell
Sqr
Str
StrComp
Time
TypeName
Возвращает абсолютное значение аргумента
Возвращает текущий путь MS-DOS
Возвращает системную дату
Вызывает выход из цикла Do-Loop
Вызывает выход из циклов For-Next и Each-For-Next
Вызывает выход из функции
Вызывает выход из процедуры
Возвращает целую часть числа отбрасыванием дробной части
Возвращает целую часть числа, округляя в сторону уменьшения
Возвращает True, если аргумент – массив
Возвращает True, если аргумент – дата
Возвращает True, если переменной не было присвоено значение
Возвращает True, если аргумент принимает значение ошибки
Возвращает True, если аргумент равен нулю
Возвращает True, если аргумент принимает числовое значение
Возвращает True, если аргумент представляет собой объект
Возвращает длину строки или количество байт, занимаемое
переменной
Возвращает текущую дату и время
Запускает на исполнение программу
Возвращает квадратный корень от аргумента
Возвращает строковое представление числа
Выполняет сравнение строк
Возвращает текущее системное время
Возвращает тип переменной
19
Тема 5. Форма: свойства и методы формы, события, организация
реакции на них.
Форма представлена в виде набора элементов управления.
Работа с элементами управления
Элементы управления используются для придания форме функциональных
возможностей. Элементы управления могут быть различными по сложности,
начиная с простых кнопок и до элементов управления мультимедиа,
позволяющих проигрывать звук и видео.
Элементы управления, как и другие объекты, имеют собственный набор
свойств, методов и событий. Они могут находиться на рабочих листах, в
диаграммах или в пользовательских диалоговых окнах.
Обычно создание элемента управления на рабочем листе или в диалоговом
окне происходит при начальной разработке формы. Для этого необходимо
выполнить следующее: меню Вид, Панели инструментов, Элементы
управления. На этой панели инструментов находятся кнопки, представляющие
большинство общих элементов управления, а также несколько дополнительных
кнопок, предназначенных для управления этими объектами.
Для того, чтобы поместить элемент управления на лист, необходимо
нажать соответствующую кнопку на панели инструментов Элементы
управления и с помощью мыши поместить элемент управления на лист.
Режим конструктора
Для эффективного управления элементами управления во время
разработки в среде Excel 97 было введено понятие режима конструктора. Когда
режим конструктора включен , можно выделять элементы управления и
редактировать их. Для включения и выключения режима конструктора
используется кнопка Режим конструктора панели инструментов Элементы
управления.
Установка свойств элементов управления
Для того, чтобы редактировать элемент управления, это можно делать
либо вручную либо с помощью кнопки Свойства. Сначала его необходимо
выделить, затем нажать кнопку Свойства, что приведет к появлению окна
Свойства.
20
Элемент управления CommandButton
Элемент управления CommandButton обычно применяется для того, чтобы
пользователь мог быстро выполнить подпрограмму с помощью
CommandButton1
одного щелчка мыши. Для того, чтобы поместить кнопку на
рабочий лист, необходимо щелкнуть по кнопке Кнопка на
панели инструментов Элементы управления
Элемент управления CheckBox
Элемент управления CheckBox (Флажок) обычно применяется для
предоставления пользователю возможности выбора. Флажки, как правило,
имеют два возможных состояния (установлен и сброшен), которые
соответствуют значениям True или False, но могут быть
 CheckBox1




также настроены для выбора из трех состояний (установлен,
сброшен и не определен). Для того, чтобы поместить кнопку на рабочий лист,
необходимо щелкнуть по кнопке Флажок на панели инструментов Элементы
управления.
Элемент управления OptionButton
Элемент управления OptionButton (Переключатель) по своим функциям
похож на элемент управления CheckBox, однако переключатель позволяет
пользователю выделять один из нескольких взаимоисключающих параметров.
Переключатели обычно отображаются группой, например,
 OptionButton1




при разработке диалога, в котором пользователь выбирает
только один из трех переключателей (т. е. когда пользователь отмечает один
переключатель, с других отметка автоматически сбрасывается).
Элемент управления ToggleButton
Элемент
управления
ToggleButton
(Выключатель)
по
своим
функциональным возможностям аналогичен элементу управления CheckBox, но
индикатор состояния производится несколько другим способом. Когда
Toggle
используется два состояния, элемент управления может выглядеть либо
Button
как нажатая либо как ненажатая кнопка. Когда используется три
состояния, элемент управления может также иметь значение Null и иметь вид
недоступной кнопки.
Элемент управления ListBox
Элемент управления ListBox (Список) позволяет выделять один или
несколько элементов из списка. Хотя список может содержать тысячи
элементов, можно изменять размер окна и регулировать число
21
одновременно отображаемых элементов. Можно использовать все элементы
списка с помощью полосы прокрутки.
Так как объект ListBox может содержать данные, он несколько отличается
от рассмотренных ранее объектов элементов управления. Вследствие этого
объект ListBox имеет различные свойства и методы, предназначенные для
получения данных из списка и передачи данных в список.
Элемент управления ComboBox
Элемент управления ComboBox (Поле со списком) по своим
функциональным возможностям похож на элемент управления
ListBox – он позволяет пользователю определять элемент из
списка. Однако объект ComboBox отображает в каждый момент времени
только один – выделенный – элемент. К тому же объект ComboBox всегда
является списком с единичным выделением, т. е. в нем нельзя выделять
несколько элементов.
Элементы управления ScrollBar и SplinButton
Элементы управления ScrollBar (полоса прокрутки) и SplinButton
(счетчик) похожи по своим функциональным возможностям. Они оба
представляют собой графический интерфейс для установки числовых
значений.
Элемент управления TextBox
Элемент управления TextBox (Поле) дает возможность пользователю
вводить текст в указанную область. Поля могут применяться для ввода простых
однострочных значений или для использования в виде простейшего
многострочного текстового редактора с возможностью переноса слов.
Тема 6. Событие, обработчик события, создание и использование.
Написание кода обработки событий для элемента управления
Обычно элементы управления имеют одно или несколько событий,
которые можно связать с подпрограммами VBA. Например, элементы
22
управления CommandButton имеют (помимо прочих) событие Click, которое
происходит после нажатия кнопки. для того. чтобы увидеть текст обработчиков
событий, необходимо выделить элемент управления и нажать кнопку
Исходный текст на панели инструментов Элементы управления, что
приведет к активизации редактора Visual Basic и появлению модуля,
содержащего код обработчиков событий этого элемента управления.
Коды обработки событий мы подробно рассмотрим во время выполнения
лабораторных работ.
Тема 7. Разработка приложений с графическим интерфейсом для MS
Excel
Разработчик и конечный пользователь
Мы часто употребляем термины разработчик и конечный пользователь.
Разработчик – это человек, который создает приложение электронных
таблиц. В совместных проектах число разработчиков больше одного (команда
разработчиков). Конечный пользователь (его для краткости будем называть
просто пользователем) – это человек, применяющий результаты деятельности
разработчика по программированию электронных таблиц. Во многих случаях
конечных пользователей бывает достаточно много, а разработчиком часто
является один из пользователей.
Кто такие разработчики
В течение 15-ти лет я занимаюсь преподаванием методологии разработки.
Поэтому чаще всего имеют дело с теми, кто называет себя разработчиками
электронных таблиц.
Среди них различаются две основные группы.
♦
Внутренние
специалисты,
которые
тесно
сотрудничают
с
пользователями и основательно знают их потребности. Во многих случаях эти
разработчики также являются пользователями своего приложения. Часто
бывает так, что они разрабатывают приложение, чтобы решить только одну
конкретную проблему.
23
♦ Специалисты со стороны, как правило, приглашаются с целью решить
проблему.
В большинстве случаев такие разработчики знакомы с вопросом лишь в
общих чертах, однако хорошо знают специфику приложения, которое
разрабатывают.
Основные типы электронных таблиц
Приведем классификацию
нескольких
основных
типов.
электронных таблиц [2], включающую
Она
проиллюстрирует,
каким
образом
электронные таблицы вписываются в общую картину управления данными с
помощью компьютера.
Конечно, данная классификация является довольно условной. Она создана
исключительно на основе моего личного опыта. Более того, ее категории часто
пересекаются, однако к ним относится большинство электронных таблиц.
Предложим такие названия категориям (типам) электронных таблиц:
электронные таблицы “на скорую руку”;
электронные таблицы “не для посторонних глаз”;
однопользовательские приложения;
приложения-“спагетти”;
 приложения-утилиты;
 надстройки с функциями рабочих листов;
 одноблоковые бюджеты;
 модели “что-если”;
 приложения для хранения и доступа к данным;
 клиентские приложения доступа к базам данных;
 приложения “под ключ”.
Электронные таблицы “на скорую руку”
Вероятно, это самый распространенный тип электронных таблиц.
Большинство электронных таблиц из этой категории являются небольшими.
24
Они разрабатываются для того, чтобы быстро решить проблему или получить
ответ на вопрос. Рассмотрим пример. Вы собираетесь купить новую машину,
поэтому необходимо для разных сумм кредита вычислить размер ежемесячной
выплаты. Или вы решили создать диаграмму, которая покажет объем продаж
вашей компании по месяцам. Введите 12 значений, затем скопируйте
диаграмму и вставьте в документ, создаваемый в текстовом процессоре.
В обоих случаях на разработку модели вы, похоже, тратите несколько
минут, и, конечно же, у вас нет времени документировать свои действия.
Скорее всего, вы и не думаете создавать какие-либо макросы или
пользовательские диалоговые окна. Наверняка вы даже не считаете нужным
сохранять эти простые электронные таблицы на диске. Поэтому электронные
таблицы этой категории не являются приложениями.
Электронные таблицы “не для посторонних глаз”
Как следует из названия, электронные таблицы, которые попадают в эту
категорию, не увидит и не будет использовать никто, кроме вас – их
разработчика. В качестве примера можно привести файл с информацией,
которая относится к оплате налогов, начисляемых на основе ваших доходов. Вы
открываете свой файл, когда к вам по почте приходит чек, или вы “влезаете” в
расходы, которые можно рассматривать как производственные, или же
покупаете у торговцев на улице ворованную автомагнитолу и т.д. Другим
примером является электронная таблица, в которой вы ведете учет времени,
потраченного вашими сотрудниками (отсутствие на работе по болезни, отпуск
и т.д.) попусту или попросту прогулянного.
Электронные таблицы данной категории отличаются, например, от
созданных
“на скорую руку”, которые не являются одноразовыми, поэтому их и
сохраняют в файлах. Однако на них не стоит тратить много времени –
примените простое форматирование (лишь в случае необходимости). В
электронных
таблицах
этого
типа
также
отсутствуют
инструменты
25
обнаружения ошибок: вы знаете, каким образом формулы создавались, поэтому
вам хорошо известно, как избежать ввода данных, приводящих к ошибочным
результатам. При появлении ошибки вы сразу будете знать, чем она вызвана.
Сложность электронных таблиц этой категории со временем возрастает,
однако они не являются приложениями. Предположим, у вас есть рабочая книга
Excel, в которой вы ведете учет своих доходов по источникам их поступления.
Эта книга на время создания была довольно простой, но вы регулярно
пополняете ее новыми элементами: сводными формулами, улучшенным
форматированием и даже диаграммой доходов по месяцам.
Самым
последним
таким
изменением
в
диаграмме
стала
линия
прогнозирования, предназначенная для того, чтобы планировать доходы,
основываясь на трендах за прошедшие периоды. Вероятно, вы будете и в
дальнейшем улучшать этот файл, и тогда он сможет перейти в категорию
однопользовательских приложений.
Однопользовательские приложения
Приложения электронных таблиц, используемые только их разработчиком,
однако по своей сложности вышедшее далеко за пределы электронных таблиц
“не для посторонних глаз”. Например, я разработал рабочую книгу, чтобы вести
в
ней
учет
зарегистрированных
пользователей
условно-бесплатных
приложений. Книга начинается простой базой данных, расположенной на
одном
рабочем
листе
(она
предназначается
только
для
просмотра
разработчиком). Однако вскоре эта рабочая книга также понадобилась для
создания накладных и почтовых этикеток. Потратив однажды около часа на
создание макросов, понял, что превратил эту рабочую книгу из приложения “не
для посторонних глаз” в настоящее однопользовательское приложение.
Несмотря на то, что никто другой никогда не воспользуется этой
электронной таблицей, она все равно стала симпатичным маленьким
приложением, которым довольно легко пользоваться. Что же касается
26
разработки, то время, которое было потрачено на доведение этой электронной
таблицы до уровня однопользовательского приложения, не прошло даром, так
как в результате сэкономлено несколько часов работы. Теперь в этом
приложении вы найдете кнопки для запуска макросов, поэтому потребуется
намного меньше усилий, чтобы справиться с учетом всех клиентов; вы также
сэкономите время, работая с почтовыми программами.
Создавая
для
себя
однопользовательские приложения, вы имеете
прекрасную возможность попрактиковаться с инструментами, которыми
пользуются разработчики Excel-приложений. Например, вы можете научиться
создавать пользовательские диалоговые окна, видоизменять меню, создавать
пользовательскую панель инструментов, писать VBA-макросы и т.д. Работа над
содержательным проектом (даже если он содержательный только для вас) – это
эффективный способ изучать сложные функции Excel (как, впрочем, и любой
другой программы).
Приложения “спагетти”
Среди электронных таблиц все еще распространены приложения“спагетти”. Само понятие возникло по причине того, что в отдельных частях
приложения разобраться бывает довольно трудно; эти части во многом так же
спутаны между собой, как спагетти на тарелке. Большинство этих электронных
таблиц
разрабатывались
как
специализированные
однопользовательские
приложения. Но со временем они перешли во владение других пользователей,
которые внесли свои изменения. По мере того, как требования менялись, а
сотрудники приходили и уходили, одни части появлялись, а другие
игнорировались. Спустя некоторое время, первоначальное назначение рабочей
книги забылось. В результате получился файл, используемый довольно часто,
однако никто по-настоящему не знает, как же этот файл в точности работает
Каждый, кто имеет дело с приложениями-“спагетти”, знает, что их необходимо
полностью переделать. Но так как никто не знает, как это сделать, со временем
дела обстоят все хуже и хуже. Консультанты по процессорам электронных
27
таблиц зарабатывают немалые деньги, занимаясь распутыванием таких
приложений. Как правило, в процессе улучшения приложений-“спагетти”
наиболее эффективным является следующее решение – заново определить, что
же требуется пользователям, и с самого начала создать новое приложение.
Никто никогда еще не был полностью доволен используемым процессором
электронных таблиц. И какой хорошей бы ни была программа Excel, в ней все
равно находят недостатки. Поэтому перейдем к следующей категории
электронных таблиц – приложениям- утилитам. Утилиты – это специальные
инструменты,
которые
предназначены
для
выполнения
единственной
повторяющейся задачи. Например, если вы часто занимаетесь импортом текста
в Excel, то вам, возможно, требуются специальные команды для обработки
текста, в частности, для преобразования (без использования формул)
выделенного текста в верхний регистр. В данном случае советуем разработать
утилиту для обработки текста, которая будет выполнять именно то, что вам
необходимо.
По
своей
природе
приложения-утилиты
являются
достаточно
универсальными.
Что касается макросов, то многие из них предназначены для того, чтобы
выполнять
конкретную
операцию
с
данными
конкретного
типа,
расположенными в рабочей книге (опять же) конкретного типа. Эффективное
приложение-утилита работает подобно тому, как и обычная команда Excel.
Другими словами, утилите необходимо распознать контекст, в котором должна
выполняться команда, и выполнить соответствующее действие. Чтобы утилита
умела
обработать
любые
возможные
ситуации,
обычно
используется
громоздкий код, предназначенный для обработки ошибок.
В приложениях-утилитах всегда используются макросы, в них также могут
применяться пользовательские диалоговые окна. К счастью, создать такие
утилиты с помощью Excel довольно легко: их следует преобразовать в
надстройки и присоединить к пользовательскому интерфейсу Excel, чтобы они
выглядели, как часть программы.
28
Надстройки с функциями рабочих листов
Как вы знаете, Excel располагает огромным количеством функций рабочих
листов, которые можно использовать в формулах. Но случается, что вам
необходима определенная функция, а ее поиски дают отрицательный результат.
В таком случае создайте свою собственную функцию, используя для этого
VBA. Благодаря пользовательским функциям рабочих листов формулы часто
становятся проще, а поддерживать электронные таблицы – легче.
Одноблоковые бюджеты
Под
одноблоковым
бюджетом
подразумеваем
рабочий
лист
(не
обязательно модель бюджета), который состоит из одного блока ячеек. Верхняя
его строка может быть составлена из имен, относящихся к промежуткам
времени (месяцам, кварталам или годам), а левый столбец обычно состоит из
категорий определенного типа. Как правило, нижняя строка и правый столбец
составлены из итоговых формул. В блоке ячеек могут использоваться формулы
подсчета промежуточных итогов. Данный тип электронных таблиц очень
распространен. С учетом как раз этой модели была разработана программа
VisiCalc (самый первый процессор электронных таблиц). В большинстве
случаев простые модели одноблоковых бюджетов не являются удачными
кандидатами в приложения, так как они слишком просты. Впрочем, среди них
существуют исключения. Например, вы могли бы подумать над превращением
такой электронной таблицы в приложение, если моделью одноблокового
бюджета является громоздкая трехмерная электронная таблица, в которую
необходимо включить сводные данные из других файлов или которой будут
пользоваться
руководители
отделов,
возможно,
не
разбирающиеся
в
электронных таблицах.
Модели “что-если”
Многие считают модель “что-если” воплощением всего самого лучшего,
что имеется в электронных таблицах. Способность мгновенно пересчитывать
29
тысячи
формул
делает
процессоры
электронных
таблиц
идеальным
инструментом для финансового моделирования, а также для других моделей,
которые зависят от значений нескольких переменных. Если подумать, то почти
каждая электронная таблица с формулами является моделью “что-если” (она
часто распространяется в виде шаблона). Изменение значения в ячейке,
используемой в формуле, представляет ситуацию постановки вопроса “Что
будет, если…?”. Кроме того, приложения данной категории довольно сложные.
Они
состоят
из
тех
электронных
таблиц,
которые
специально
разрабатывались для прогнозирования ситуаций влияния отдельных значений
на конечный результат. Модели “что-если” являются хорошими кандидатами в
приложения, ориентированные на пользователя, особенно если модель будет
использоваться
продолжительное
время.
При
условии
создания
для
приложения удачного графического интерфейса его сможет легко использовать
даже тот, кто совсем не разбирается в компьютерах. Например, вы бы могли
создать интерфейс, который предоставляет пользователю возможность задавать
имена для различных наборов условий, мгновенно просматривать результаты
выбранного сценария и одним щелчком на кнопке создавать правильно
отформатированную сводную диаграмму.
Электронные таблицы для хранения данных и доступа к ним
Не удивительно, что электронные таблицы часто используются для
хранения списков или для выполнения скромных манипуляций с базами
данных. Многие пользователи считают, что просматривать данные и
манипулировать ими намного легче в электронной таблице, а не с помощью
процессора баз данных. Увеличение размера рабочей области значительно
расширило потенциальные возможности по управлению базами данных.
Электронные таблицы этой категории часто являются кандидатами в
приложения, особенно если конечным пользователям необходимо выполнять
операции умеренной сложности. Впрочем, встроенное в Excel диалоговое окно
формы данных и его команды автофильтрования делают работу с базами
30
данных такой легкой, что даже начинающие пользователи могут быстро
научиться выполнять в базах данных простые операции.
Что же касается сложных приложений баз данных, в частности, таких, в
которых используется огромное количество таблиц с заданными связями между
ними, то для них больше подходит настоящий процессор баз данных –
например, Access.
Клиентские программы баз данных
Электронные таблицы все чаще применяются для доступа к внешним
базам данных. Пользователи электронных таблиц с помощью инструментов
Excel получают доступ к данным, хранящимся во внешних файлах, даже если у
этих данных разный формат. Когда вы создаете приложение, которое
выполняет эту задачу, то к нему иногда обращаются как к управленческой
информационной системе (executive information system – EIS). Такая система
комбинирует данные из нескольких источников и сводит их для пользователей.
Доступ из электронной таблицы к внешним базам данных часто вызывает
страх
у
начинающих
пользователей.
Создание
управленческой
информационной системы является идеальным способом применения Excel, так
как основная цель подобных систем обычно состоит в том, чтобы обеспечить
простоту в использовании.
Приложения “под ключ”
Последняя категория электронных таблиц является самой сложной. Говоря
“под ключ”, подразумеваем такую готовность к использованию, когда
конечный пользователь должен иметь минимальную подготовленность или
вообще не обладать ею.
Например, при загрузке файла появляется окно, позволяющие сделать
совершенно однозначный выбор. Приложения “под ключ” могут выглядеть так,
будто они созданы не с помощью процессора электронных таблиц, и часто
пользователь взаимодействует не с ячейками, а с диалоговыми окнами.
31
Электронные таблицы многих описанных выше категорий вполне можно
сделать приложениями “под ключ”. Среди общих элементов таких приложений
самыми главными являются хорошее планирование, обработка ошибок и
система пользовательского интерфейса.
Такие приложения мы рассмотрим во время выполнения лабораторнопрактического цикла.
Тема 8. Разработка приложений с графическим интерфейсом для MS
Word
Создание приложений VBA в Word, типичные ситуации
Word — старейшее и самое популярное приложение, входящее в состав
Microsoft Office. В большинстве организаций пользователи готовят документы
именно в Word [4].
С точки зрения программирования Word — это прежде всего средство для
изготовления отчетов к базам данных. При этом отчет — это любой документ,
который формируется на основе информации из базы данных, например,
договор, акт приемки-передачи, приходный кассовый ордер, объявление на
взнос наличными, распоряжение в бухгалтерию, накладная и т.п. Конечно же, к
отчетам, которые можно формировать в Word, относятся и документы со
сводными данными — отчеты за период, ведомости и т.п.
Автору приходилось создавать приложения с отчетами, разработанными в
самых разных программных продуктах — Microsoft Access, Crystal Reports,
Microsoft Reporting Services и т.п. Если ваше приложение генерирует отчеты к
базам данных в Microsoft Word, то, скорее всего, такие отчеты будут не самыми
быстрыми с точки зрения их формирования и не самыми простыми с точки
зрения программирования. Зато совершенно точно они будут самыми
дружелюбными по отношению к конечному пользователю. Почему?
32
Очень часто на предприятии возникает необходимость исправить в форме
отчета всего пару строк — например, вместо "Директор" поставить "И.О.
Директора". Если отчет создан в Crystal Reports или Microsoft Reporting
Services, придется срочно обращаться к разработчику. А через какое-то время
И.О. утвердят в должности директора, и разработчику придется править отчет
снова.
Если же отчет изначально создается в документе Word, то пользователь
всегда может сам внести в созданный документ необходимые изменения —
подавляющее большинство пользователей на предприятии умеют работать в
Word. Срочно разыскивать разработчика уже не нужно.
У изготовления отчетов в Word есть и другие преимущества. Как правило,
при изготовлении отчетов в Word значения из базы данных подставляются в
шаблон отчета, который хранится в базе данных или файловой системе (в
файле *.dot). Если формат отчета сложный, с большим количеством
специфического оформления (пример — объявление на взнос наличными), то
намного проще подготовить его шаблон в Word, чем, к примеру, в Crystal
Reports или Reporting Services.
Еще одно программное применение Word — работа с разными форматами
документов. Word умеет работать с документами самых разных форматов. Эти
его
возможности
вполне
можно
применить
для
массовой
обработки
документов.
Случай из практики: в каталоге на диске у нас собралось несколько сотен
"разнокалиберных" документов разных пользователей. Часть из них создана в
Word разных версий, часть — просто текстовые файлы, некоторые документы
в — форматах HTML, XML или EML (сообщения электронной почты). На
предприятии внедрена система документооборота на основе SharePoint Portal
Server и нам необходимо привести все эти документы к единому формату
(Word 2003) и загрузить их на SharePoint Portal Server. Конечно же, без
автоматизации в такой ситуации возиться придется очень долго.
33
Третье программное применение Word — форматирование документов,
например, программное применение стилей, поиск и замена участков текста
сразу во многих документах, работа со структурой документа и т.п. Обычно
такие задачи ставятся в издательствах, например, при подготовке рукописей.
На практике для решения большинства программных задач достаточно
знать всего лишь пять объектов (с сопутствующими коллекциями):

объект Application;

объект Document (с коллекцией Documents);

объект Selection;

объект Range;

объект Bookmark (с коллекцией Bookmarks).
Ниже все эти самые важные объекты будут подробно рассмотрены. Для
каждого объекта вначале будут рассмотрены общие моменты, связанные с
ними, например, в каких ситуациях они нужны и как при помощи них
выполнять те или иные действия. Поскольку наиболее часто встречающаяся
задача программирования в Word — это создание документа (на основе
шаблона) и запись в нужное место документа необходимой информации, то
акцент будет сделан использовании соответствующих объектов для решении
этой задачи.
Объект Word.Application, запуск нового экземпляра Word, события
объекта Word.Application
Объект Application — это само приложение Microsoft Word. Все остальные
объекты Word "вложены" в этот объект. Создать этот объект — значит
запустить Word на вашем компьютере. Как правило, это нам и надо (если мы
создаем в формате Word из другого приложения, например, из Access). Но не
забудьте — если вы запускаете Word из другого приложения Office, то
необходимо добавить в ваш проект ссылку на библиотеку Microsoft Word 11.0
Object Library.
Код на запуск Word очень прост:
Dim oWord As New Word.Application
34
Однако, выполнив этот код из другого приложения, вы, скорее всего, даже
не заметите, что у вас что-то произошло. Причины просты:

по умолчанию Word запускается в скрытом окне;

если в нем не открыт ни один документ, он тут же и
закрывается (после того, как завершается создавшая его процедура).
Сделать Word видимым очень просто:
oWord.Visible = True
Однако возникает вопрос: а нужно ли его делать видимым? Некоторые
знакомые разработчики утверждают, что не нужно. Пусть Word работает в
скрытом окне, создавая требуемый документ. Когда пользователю потребуется,
он этот документ откроет. Решать вам, но я предпочитаю, чтобы Word все-таки
был видимым: во-первых, сразу видны все проблемы при создании документа,
а, во-вторых, пользователям почему-то очень нравится, когда у них на глазах
открывается Word и начинает печатать строки, которые в противном случае
пришлось бы печатать им самим.
Если вы работаете с Word в скрытом окне, не забудьте после выполнения
необходимых действий его закрыть (иначе он так и останется в оперативной
памяти, видимый только через Task Manager). Для закрытия Word нужно
вызвать его метод Quit().
Чтобы Word не закрывался сам собой, в нем достаточно создать новый
документ. Подробно об этом будет рассказано в следующем разделе, но самый
простой вариант создания нового документа Word выглядит так:
Dim oWord As New Word.Application
oWord.Visible = True
oWord.Documents.Add
Если Word уже открыт, то можно получить на него ссылку, например, при
помощи такого кода:
Set oWord = GetObject(,"Word.Application")
Однако на практике, кроме очень специальных случаев (активизация
объектов OLE), такой подход по сравнению с открытием нового экземпляра
35
Word ничего нам не дает. Наоборот, появляется дополнительный риск нечаянно
испортить открытый в существующем экземпляре созданный пользователем
документ или закрыть существующий экземпляр Word без сохранения
пользовательских документов. Поэтому лучше создавать новый экземпляр
Word.
Если же ваш код VBA выполняется в Word (то есть Word уже запущен), то
объект Application создавать уже не надо. В этой ситуации он будет
автоматически доступен в любой момент (чтобы в этом убедиться, достаточно
впечатать в окне редактора кода Application и добавить точку). Более того, если
не указано, к какому объекту относится то или иное свойство или метод,
компилятор VBA в Word автоматически считает, что это свойство или метод
принадлежит объекту Application. Поэтому такой код функционально одинаков:
Application.Selection.TypeText "Мой текст"
и
Selection.TypeText "Мой текст"
Еще один важный момент, который связан с объектом Application в Word.
Для
этого
объекта
предусмотрено
большое
количество
удобных
в
использовании событий (открытие документа, выход из Word, щелчок правой
кнопкой мыши, изменение документа, печать документа, сохранение документа
и т.п.) Однако по умолчанию все эти события не видны. Чтобы они появились,
необходимо в разделе Declarations кода формы (только формы — не модуля!)
объявить объект Application с ключевым словом WithEvents, например, так:
Public WithEvents App As Word.Application
В списке объектов у нас появится новый объект App (то есть Application),
для которого можно выбрать события и добавлять код в событийные
процедуры точно так же, как это мы делаем для формы и элементов
управления.
Объект Application, свойства, методы и события
Ниже для справки приведены самые важные свойства, методы и
события объекта Application:
36

ActiveDocument — возвращает объект активного документа в данном
экземпляре Word. Используется очень активно, обычно без
упоминания объекта Application, например:

ActiveDocument.Save
Это свойство доступно только для чтения, поэтому, чтобы сделать
какой-нибудь документ активным, придется вызывать для его объекта
метод Activate().
Свойства и методы объекта Word.Selection, программная работа с
выделенным участком текста в VBA
Часто используемые свойства объекта Selection:

Bookmarks — возвращает коллекцию Bookmarks, то есть все закладки,
которые имеются в выделенном участке текста. Закладки — один из
самых часто используемых объектов в приложениях VBA с
использованием Word. Подробнее о них будет рассказано в
специальном разделе.

Start и End — свойства, которые определяют номер первого и
последнего символа в выделении (по отношению к document story —
то есть текста документа, или другого story — например, сносок).
Первая позиция в document story — всегда 0. если вы создаете
документ из неизменяемого шаблона, вполне можно использовать
эти свойства, чтобы найти нужное место в документе для ввода
текста (однако этот способ не очень рекомендуется — по причине
того, что при правке шаблона вам придется править много
программного кода).

ExtendMode — переключиться в режим выделения текста, когда
нажатие клавиш со стрелками, <Home> и <End> приводит не к
перемещению указателя ввода, а к изменению выделения.

Find — очень важное свойство, которое возвращает объект Find.
Подробнее про этот объект и про его вложенный объект Replace
будет рассказано в разделе, посвященном поиску и замене текста.

Flags — свойство, которое позволяет проверить или изменить
некоторые моменты, связанные с выделением: является ли оно
активным, находится ли в конце строки и т.п. Регулирует пять
параметров одновременно при помощи битовой маски.

Font — возвращает объект Font, при помощи которого можно
управлять оформлением текста в выделении. Доступны все
возможности, которые есть на графическом интерфейсе в меню
Формат->Шрифт. Например, чтобы назначить выделенному тексту
шрифт Arial размера 10, можно использовать код
37
Selection.Font.Name = "Arial"
Selection.Font.Size = 10
Объект Word.Range, программная работа с диапазоном в документе,
свойства и методы объекта Range, преимущества по сравнению с
объектом Selection
Как уже говорилось, чаще всего разработчиками для определения
места ввода текста и навигации по документу используется объект Selection.
Для этих же целей можно использовать и объект Range. Главное отличие
между объектами Range и Selection заключается в том, что объект Selection
может определить и пользователь (выделив текст мышью), а объект Range
можно определить только программно, и он не зависит от текущего
положения указателя или действий пользователя.
Рекомендуется, если это возможно, всегда использовать объект Range
вместо объекта Selection. Тем самым мы защищаем себя от возможных
ошибок,
связанных
с
действиями
пользователя
(например,
если
пользователь в момент, когда программно вводится текст, щелкнет мышью
по какому-либо месту в документе).
Формальное
определение
объекта
Range
выглядит
так:
это
программный объект, который представляет непрерывный участок текста в
документе. Этот объект не зависит от объекта Selection — вы можете
работать с объектом Range, не изменяя текущего выделения. Он может не
включать в себя ни одного символа (представлять курсор ввода текста).
Объектов Range в каждый момент времени может быть сколько
угодно, а объектов Selection — только один.
Как создается объект Range:

первый способ — воспользоваться методом Range() объекта
Document. В этом случае вам потребуется передать номера начального и
конечного символа диапазона, а также document story, в который будут
отсчитываться эти символы. Например, создать диапазон, который будет
включать в себя первые 10 символов документа, можно так:
38
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)

второй способ — воспользоваться свойством Range, которое
предусмотрено для огромного количества объектов ( Bookmark, Selection,
Table-Row-Cell, Paragraph и т.п.). В этом случае при помощи этого свойства
мы получаем объект Range, представляющий данный объект;

третий
способ —
воспользоваться
большим
количеством
вспомогательных свойств (Characters, Words, Sentences и т.п.), которые
делят текст на отрезки — объекты Range. Эти свойства возвращают
коллекции объектов Range. Конечно, если вы создаете коллекцию объектов
Range, представляющих каждый символ большого документа, с точки
зрения производительности такое решение может быть не самым лучшим;

четвертый способ — переопределить существующий объект
Range. Обычно для этой цели используется метод Range.SetRange();

ну и, наконец, пятый способ, самый удобный в реальных
приложениях. Он заключается в том, что вы вначале создаете шаблон
нужного вам документа (договора, приходного ордера, отчета и т.п.), в
который при создании помещаете закладки в тем места, в которые потом
потребуется произвести вставку данных. Затем программным способом для
каждой закладки создается объект Range, и уже с его помощью
производится ввод информации (данные о заказчике, сумма в кассовом
ордере и т.п.)
Объект Word.Bookmark, применение закладок в шаблоне,
получение из объектов Bookmark объектов Selection и Range
Объект Bookmark — это просто закладка. На практике это — самый
удобный способ навигации по документам, созданных при помощи
шаблонов (например, отчетов). Принципиальное отличие его от объектов
Selection и Range заключается в том, что все выделения и диапазоны
теряются при закрытии документа (объекты Range вообще существуют
только во время работы создавшей их процедуры, а закладки сохраняются
39
вместе с документом. Если документ создан на основе шаблона, то все
закладки, которые были определены в шаблоне, будут определены и в
созданном на основе этого шаблона документе.
Создать закладку (меню Вставка -> Закладка) намного проще, чем
считать
количество
символов
документа/абзаца/предложения,
для
или
объекта
выполнять
Range
от
начала
операции
Move()
(MoveDown(), MoveRight(), MoveNext()) для объекта Selection. Кроме того,
если вы будете исправлять шаблон (а делать это на практике приходится
очень часто), вам, скорее всего, не придется править код для определения
объектов Selection и Range.
Функциональность объекта Bookmark невелика. Свойств и методов у
этого объекта намного меньше, чем у объектов Selection и Range. Однако
обычно никто и пытается использовать объект Bookmark для работы с
текстом напрямую. Из объекта Bookmark очень просто получить объект
Selection (при помощи метода Select()) или объект Range (при помощи
свойства Range()) — и дальше можно пользоваться уже свойствами и
методами этих объектов, например:
ThisDocument.Bookmarks("Bookmark1").Select
MsgBox Selection.Text
Создавать объекты Bookmark программным способом необязательно,
но если есть необходимость, то можно использовать метод Add() коллекции
Bookmark:
ThisDocument.Bookmarks.Add Name:="temp", Range:=Selection.Range
У этого метода — всего лишь два параметра, оба которых
используются в примере.
Некоторые важные свойства объекта Bookmark:

Empty — если это свойство возвращает True, то это значит, что
закладка указывает на точку вставки, а не та текст;
40

Name — имя закладки. Очень удобно, что найти нужную закладку в
коллекции закладок можно не только при помощи индекса (номера)
закладки, но и по ее имени.

Range — возвращает объект Range на месте этой закладки.

Start, End, StoryType — аналогично таким же свойствам у объекта
Selection.
Методов у объекта Bookmark всего три — Copy(), Delete() и Select().
Copy() — создает закладку на основе существующей, Delete() — удаляет ее,
а Select() — выделяет то, на что ссылается закладка.
Интернет-источники
1. http://kurs.ido.tpu.ru/courses/Pro_in_econ/tema31/tema31.htm
2. John_Walkenbach__Excel_2003_Power_Programming_with_VBA_(RUS)_Edited_by_AlexST.pd
f
3. http://msdn.microsoft.com/ru-ru/library/office/ff604039(v=office.14).aspx
4. http://www.askit.ru/custom/vba_office/m10/10_01_word_vba_basics.htm
41