Основы офисного программирования и язык VBA

Основы офисного программирования и язык VBA

Обычно книги и статьи по VBA посвящены тому, что можно сделать на VBA, но для чего он совсем не предназначен. Так, например, у меня есть книга (на 800 страниц), посвященная, в основном, таким вещам, как системные вызовы и конструирование древовидных структур вручную. Это как раз то, чего нужно бы избегать,- если вы не пишете трояны, конечно.
В этом смысле данная статья - полная противоположность книгам такого рода, то есть мы займемся именно тем, для чего VBA предназначен: созданием и "оживлением" COM-объектов. Полученная программка будет полезна не только в качестве примера, но и практически - то есть ее можно использовать и даже, если повезет, продать.

Подвижный VBA'стик в кислотной ActiveX-среде
Проиллюстрированная далее программа показывает, как VBA получает доступ, создает и управляет ActiveX-элементами за пределами иерархии классов Office. Создавать элементы управления не имеет особого смысла, если не обрабатывать специфические для них события. Поскольку ActiveX-элементы у нас будут создаваться динамически и их количество не будет даже предварительно известно, то и обработчики будут генерироваться динамически

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

VBA и объекты. Обзор
Office - это среда, в которой многие задачи можно решать без всякого программирования. Office 2000 - это среда, в которой класс таких задач существенно расширился. Но для программиста ценность офисной среды состоит в том, что все задачи, решение которых может быть получено "руками", можно получить и программно. И все, что нельзя сделать руками, можно сделать программно.

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

Типы данных
Одни из первых вопросов, возникающих при изучении языка программирования: "Как в нем устроена система типов данных? Какие есть простые типы, как создаются сложные, структурные типы, есть ли возможность определения собственных типов, динамических типов, можно ли в нем определять классы - "настоящие" типы, где определяется не только область возможных значений и структура данных, но и операции над ними?"

Что нового в классах "Office 2000"
Класс является обобщением понятия типа данных и задает свойства и поведение объектов класса - экземпляров класса. Каждый объект принадлежит некоторому классу. Отношение между объектом и его классом такое же, как между переменной и ее типом. Класс - это объединение данных и обрабатывающих их процедур и функций. Данные называются также переменными класса, а процедуры и функции - методами класса. Переменные определяют свойства объекта, а совокупность их значений - состояние объекта. Наряду со свойствами и методами с классом связывается еще одно понятие - события

Семейство классов и реализация интерфейсов
Возможность создания событий для классов, определенных программистом, существенно расширяет их возможности. Теперь такие классы обладают всеми тремя компонентами, присущими "настоящим" классам, - свойствами, методами и событиями, теперь и их объекты могут индивидуально реагировать на происходящие события. Сейчас мы расскажем еще об одном важном нововведении - возможности реализовать в одном классе интерфейс другого класса. Эта новинка направлена на создание полноценного семейства классов, связанного наследованием интерфейсов и реализующего полиморфизм методов семейства классов

Несколько слов об API, Win32, DLL
API (Application Programming Interface - интерфейс прикладных программ) - это множество функций, организованных, обычно, в виде DLL. Функции API позволяют организовать интерфейс между прикладной программой и средой, в которой работает эта программа. Вызов функций API позволяет программе получать доступ к ресурсам среды и управлять ее работой. Как правило, API задает стандарт взаимодействия среды и прикладной программы.

Операторы
VBA - операторный язык. Это значит, что его программы (модули) представляют последовательности операторов. Набор операторов VBA весьма обширен и не уступает в этом "большим" языкам вроде Паскаля и С. Группу декларативных операторов VBA, служащих для описания объектов, с которыми работает программа (типов, переменных, констант, объектов приложений и др.), мы уже рассмотрели. Операторы другой группы обеспечивают присвоение и изменение значений этих объектов, операторы третьей группы управляют ходом вычислений, четвертой - работой с каталогами и файлами и т.д

Операции
В любом языке программирования допустимы выражения. Нужно уметь выражаться корректно. Выражения строятся из переменных, констант, встроенных функций с использованием знаков операций и скобок. Запись выражения задает правило (алгоритм) вычисления его значения и его типа. Естественно, что тип и значения всех его переменных должны быть определены до момента вычисления выражения. Языки программирования различаются между собой тем, до какой степени они допускают автоматическое преобразование типов данных в процессе вычисления выражения



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

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

Проектирование интерфейса. Меню
В предыдущих лекциях в примерах и описании VBA использовалась заключительная англоязычная бета - версия Office 2000. При описании интерфейса я перешел на русифицированную бета - версию Office 2000. Я полагаю, что программисту должно быть все равно, с какой версией он работает, как называется соответствующий пункт меню "Сервис" или "Tools". Тем не менее, разумнее описывать интерфейс применительно к русифицированному варианту.

Диалоговые окна и элементы управления
Диалоговые окна (формы) и элементы управления составляют основу современного визуального интерфейса. Все эти элементы и технология работы с ними в основном стандартизованы и являются похожими для разных платформ и программных сред. Поэтому не удивительно, что приложения Excel, Word и PowerPoint разделяют единые объекты, задающие диалоговые окна и элементы управления. Эти объекты помещены в специальную библиотеку MSForms.

Объект UserForm (диалоговое окно), коллекция UserForms (диалоговые окна)
Объект UserForm (диалоговое окно или форма) - прямоугольное окно на экране с размещенными на нем элементами управления - важная часть пользовательского интерфейса. Создание и использование диалоговых окон было рассмотрено в предыдущей лекции. Здесь мы кратко опишем свойства класса UserForm и элементов управления.

Метод Repaint (Перерисовать)
Этот метод предназначен для восстановления модифицированных изображений диалоговых окон, рамок и страниц. Поскольку система сама перерисовывает изменные элементы управления, использовать метод Repaint следует лишь тогда, когда пользователь немедленно должен увидеть результаты модификации, не дожидаясь, пока это сделает система.

Основные виды файлов в Office 2000
Как правило, приложения Office имеют дело с файлами, хранящими документы этих приложений. Это файлы с документами Word (с расширениями.doc), рабочими книгами Excel (с расширениями.xls), базами данных Access (с расширениями.mdb). Операции по созданию, открытию и записи этих файлов выполняются с помощью соответствующих методов приложений, которые запускаются командами меню File. Но офисные системы должны уметь работать и с файлами других форматов. Например, часто требуется считывать данные из обычных текстовых файлов и заносить информацию, в них хранящуюся, в таблицы Excel или базы данных Access.

Вместо заключения
Знаю по себе, что книги редко отвечают на вопросы, требующие сиюминутного решения. Цель книг другая. При прочтении хорошей книги число интересных вопросов, которые можно задать, по крайней мере, самому себе должно только возрастать. И вся прелесть состоит в том, что на эти вопросы удается найти ответы. В поисках ответов мы часто обращаемся к друзьям, коллегам, а иногда, когда есть такая возможность, и к автору книги. Я получаю достаточно много писем с различными вопросами по поводу офисного программирования. Не всегда, но, по возможности, стараюсь на них отвечать.