- •Основы офисного программирования и язык vba
- •Офисное программирование
- •Состав Office 2000
- •Инсталляция Office 2000
- •Содержимое диска "Resource Kit"
- •Документ Issues
- •Документ ork9
- •Папка Tools
- •Содержимое диска "Language Pack"
- •Об этой книге и ...
- •Моя благодарность
- •Vba и объекты. Обзор
- •Библиотека объектов Office 2000 - каркас приложений
- •Встраивание вместо наследования
- •Построение каркаса документа
- •Библиотека объектов Office 2000 и Object Browser
- •Объекты Application
- •Свойства-участники
- •Вторая группа терминальных свойств
- •Методы объектов Application
- •События объектов Application
- •Совместная работа приложений. Создание объектов Application. Раннее и позднее связывание
- •Коллекции в Office 2000
- •Коллекции объектов Office 2000
- •Коллекции Excel: Workbooks, Sheets
- •Коллекция Workbooks
- •Коллекция Sheets
- •Коллекции Word: Documents, Paragraphs и другие
- •Коллекция Documents
- •Коллекция Paragraphs
- •Коллекция Sections
- •Коллекции Characters, Words, Sentences
- •Коллекции и конструкция For Each … Next
- •Объекты Range
- •Что определяет объект Range?
- •Метод Range
- •Объекты Selection
- •Метод Select и свойство Selection
- •Активные объекты и метод Activate
- •Проектирование документов
- •Документ и его программный проект
- •Модули - обработчики событий
- •Стандартные модули
- •Модули классов
- •Модуль макросов
- •Структура модуля. Окно проекта и Окно кода
- •Окно проекта
- •Свойства проекта
- •Имя проекта
- •Защита проекта
- •Окно кода
- •Еще раз о "переиспользовании" модулей
- •Проект и область видимости
- •Система документов и ее проект
- •Организация системы документов
- •Как организуются ссылки между проектами
- •Обмен информацией между документами
- •Система документов One - Two - Three
- •Типы данных
- •Простые типы данных.
- •Объявление переменных и констант простых типов
- •Синтаксис объявления простых переменных
- •Объявления по умолчанию
- •Константы
- •Массивы
- •Динамические массивы
- •Записи и тип, определенный программистом
- •Что можно делать с записями?
- •Раздел объявлений
- •Раздел опций
- •Разделы констант, типов и переменных
- •Раздел Declare
- •Правила именования
- •Типы и классы Еще раз о понятии "класс"
- •Что нового в классах "Office 2000"
- •Создание класса "Личность"
- •Объекты и переменные
- •Объекты, класс которых определен пользователем.
- •Объекты "родного" приложения
- •ActiveX-объекты
- •Модуль класса Свойства
- •Сокрытие свойств
- •Конструкторы и деструкторы. Стандартные события
- •Стандартные события Initialize и Terminate
- •Два конструктора класса Rational
- •Процедуры - свойства
- •Как создаются процедуры- свойства
- •Синтаксис Let, Get и Set
- •Классы, как упаковка
- •Семейство классов и процедуры - свойства
- •Friend методы
- •События
- •Классы, объекты With Events и обработчики событий
- •Модуль класса с объектом WithEvents
- •Объект WithEvents
- •События собственных классов
- •Как создать класс с событиями
- •Как зажигаются события
- •Где и как следует создавать обработчики событий для экземпляров класса
- •Связывание объектов
- •Реальные объекты и инициирование событий
- •Семейство классов и реализация интерфейсов
- •Наследование
- •Виртуальные методы и полиморфизм
- •Абстрактные классы
- •Наследование и полиморфизм в Office 2000
- •Наследование интерфейсов
- •Полиморфизм семейства классов
- •Проект "Люди и Машины"
Что можно делать с записями?
Итак, пусть определен пользовательский тип T и объявлены переменные этого типа, например X и Y. Что можно с ними сделать? Допустимо ли присвоение (X=Y) или сравнение (If (X=Y) Then Fun), допустимы ли операции над записями? Ответ: нет, за одним исключением - присвоение допустимо, все остальное нет, в том числе и сравнение. Так что можно написать:
Петров = Козлов
Но нельзя написать:
If (Петров = Козлов) Then Debug.Print "Записи идентичны"
Отсутствие разрешенных операций над записями не означает, что с ними нельзя работать. Главное, что определен прямой доступ к полям записи, и этого достаточно, - с полями можно работать, как с переменными. Наш пример (Sub UserType) демонстрирует работу с полями записей.
Раздел объявлений
Итак, еще раз напомним, что объявления можно давать на двух уровнях - модуля и процедуры. На уровне модуля раздел объявлений идет первым и автоматически отделяется чертой от раздела методов. На уровне процедуры объявления и операторы могут быть перемешаны, требуется лишь, чтобы объявление переменной предшествовало ее использованию. Хорошим тоном считается и в процедурах иметь два четко выделенных раздела и все объявления размещать в начале процедуры, так чтобы они предшествовали исполняемой части процедуры - разделу операторов.
В классически надежном языке программирования Паскаль, созданном Никласом Виртом, раздел объявлений имел четкую структуру и в свою очередь подразделялся на разделы, содержащие объявления констант, типов, процедур, переменных. В языке VBA такого формального разделения нет, поэтому возможно, что объявление переменных пользовательского типа T предшествует объявлению самого типа. Опять-таки наша рекомендация состоит в том, что программист должен самостоятельно поддерживать структуру раздела объявлений и разделять объявления констант, типов и переменных. Давайте четко выделим основные части раздела объявлений:
-
Раздел опций.
-
Раздел констант.
-
Раздел типов.
-
Раздел переменных.
-
Раздел Declare.
Раздел опций
Опции являются указаниями для транслятора. Они могут задаваться только на уровне модуля и должны начинать раздел объявлений. Заметьте, это не пожелание, а синтаксическое требование. Опции задаются ключевым словом Option, после которого идет имя опции и возможно параметры. Часть из возможных опций мы уже рассмотрели по ходу дела. Сейчас же перечислим их состав полностью:
-
Explicit - Об этой опции мы уже подробно говорили. При ее указании транслятор требует, чтобы все переменные модуля были явно описаны. Правильно включить эту опцию раз и навсегда в опциях Редактора VBA.
-
Base - Эта опция имеет два значения: 0 и 1, указывающие нижнюю границу индекса массивов, задаваемую по умолчанию. Правильно не пользоваться этой опцией, а самому и всегда указывать нижнюю границу. К сожалению, нет флажка, который бы заставлял нас следовать этому разумному правилу.
-
Private - Эту опцию, достаточно поместить в один из модулей проекта, обычно, в главный модуль проекта, который неявно всегда выделяется программистом. При ее задании проект делается закрытым и недоступен для других проектов в системе документов.
-
Compare - Опция говорит транслятору, как он должен выполнять сравнение строк в процедурах модуля. Параметр опции может принимать одно из трех возможных значений:
-
{Binary | Text | DataBase}
По умолчанию VBA применяет метод Binary, при котором строки сравниваются по внутренним кодам соответствующих символов. В Windows порядок сортировки определяется кодовой страницей. Вот часть типичного такого порядка:
A < Z < a < z
z < А < Я < а < я
Метод сравнения Text основан на сравнении, не чувствительном к регистру, так что при сравнении заглавные и строчные буквы не различаются. Для тех же символов порядок при этом сравнении будет такой:
(A = a) < (Z = z)
(Z = z) < (А = а) < (Я = я)
Метод DataBase допустим лишь при работе с Access. Сравнение при этом базируется на порядке, задаваемом локализацией той БД, для которой проводится сравнение.