- •Основы офисного программирования и язык 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
- •Наследование интерфейсов
- •Полиморфизм семейства классов
- •Проект "Люди и Машины"
Система документов One - Two - Three
Рассмотрим теперь систему документов из тех же трех книг BookOne, BookTwo, BookThree.xls, проекты которых связаны ссылками. Наша основная цель, - продемонстрировать на примере работу трех проектов с общей информацией и общими методами, вызываемыми во всех проектах.
Вначале несколько слов об интерфейсе нашей системы документов. Мы сделали его достаточно простым. На первом рабочем листе каждой из трех книг расположены три командные кнопки: ChooseBook, ChangeGlobal, PrintGlobal.
Рис. 2.7. Командные кнопки управления системой документов
Когда пользователь щелкает первую из этих кнопок, соответствующий обработчик, открывает диалоговое окно, позволяет выбрать нужную книгу и активизирует ее. Вторая из кнопок отвечает за работу с общей информацией. В каждом из документов общая информация изменяется соответствующим образом. Обработчик третьей кнопки демонстрирует работу с общими методами. Перейдем теперь к деталям организации совместной работы трех документов и их проектов. Мы начали с того, что проектам дали имена, совпадающие с именами книг. Проект книги BookOne является в нашей системе основным, - он хранит глобальную информацию, общие методы и на него ссылаются остальные проекты системы. Глобальную информацию будем представлять тремя общими переменными, расположив их в стандартном модуле ModuleOne проекта BookOne:
Option Explicit
'Глобальные переменные системы документов One - Two - Three
Public One As String, Two As String, Three As String
Три обработчика события Click для трех командных кнопок вызывают три общих метода ChooseBook, ChangeGlobal, PrintGlobal:
Private Sub CommandButton5_Click()
ChooseBook
End Sub
Private Sub CommandButton4_Click()
ChangeGlobal
End Sub
Private Sub CommandButton3_Click()
PrintGlobal
End Sub
Назначение процедуры ChooseBook и ее текст уже приведены. Заметим только, что эта общая процедура вызывается соответствующими обработчиками во всех трех модулях. Мы поместили ее не в стандартный модуль проекта BookOne, а в модуль, связанный с листом Sheet1 книги BookOne. Это, однако, ничуть не мешает ее вызову из других проектов. Процедура ChangeGlobal, помещена в стандартный модуль с именем ModuleOne. Она позволяет работать с глобальными переменными, и поскольку в каждом проекте работа с ними выполняется по-своему, то она не является общей процедурой. В каждом проекте есть свой вариант этой процедуры, который и вызывается обработчиком Click командной кнопки ChangeGlobal. Заметим, что когда речь идет об основном проекте, где описаны глобальные переменные, при обращении к ним не требуется использовать полные имена:
Public Sub ChangeGlobal()
One = "My value is One "
Two = "My value is One "
Three = "My value is One "
End Sub
В стандартный модуль ModuleOne мы поместили и процедуру PrintGlobal. Текст ее тоже уже приведен. Заметим, что в каждом проекте будет свой вариант этой процедуры, но в каждом из них на последнем этапе работы будет вызываться процедура PrintGlobal проекта BookOne. В стандартном модуле находится функция Plus1, которая будет вызываться из других проектов. Это очень простая функция, но она выполняет свою важную роль, демонстрируя передачу информации от проекта к проекту через аппарат формальных - фактических параметров процедур и функций. Вот ее текст:
Public Function Plus1(ByVal X As Integer) As Integer
Plus1 = X + 1
End Function
Проект BookTwo ссылается на проект BookOne, использует его общие переменные и вызывает его методы - ChooseBook, PrintGlobal, Plus1. Он является хранителем общей информации для проектов BookTwo и BookThree:
Option Explicit
'Глобальная переменная документов BookTwo, BookThree
Public TwoThree As String
Поскольку все три документа устроены одинаково, то достаточно привести тексты одного обработчика и двух процедур, задающие специфику работы в проекте этого документа:
Private Sub CommandButton1_Click()
BookOne.Sheet1.ChooseBook
End Sub
Public Sub ChangeGlobal()
'Изменение значений глобальных переменных системы документов
BookOne.ModuleOne.Two = "My value is Two "
TwoThree = "My value is Two - Two "
End Sub
Public Sub PrintGlobal()
Dim Number As Integer
Debug.Print ("Работает процедура PrintTwo")
Debug.Print ("Печать глобальных переменных")
Debug.Print TwoThree
'Вызов процедур и функций проекта BookOne
Number = BookOne.ModuleOne.PLus1(1)
Debug.Print ("Это книга " & Number)
ChangeGlobal
BookOne.ModuleOne.PrintGlobal
End Sub
Пример 2.4. (html, txt)
Полагаю, что эти тексты достаточно красноречивы и не нуждаются в дальнейших пояснениях. Несколько слов теперь о третьем документе системы. Он введен только для того, чтобы показать, что при росте системы новых трудностей не возникает. Вот его тексты:
Private Sub CommandButton1_Click()
BookOne.Sheet1.ChooseBook
End Sub
Public Sub ChangeGlobal()
'Изменение значений глобальных переменных системы
BookOne.ModuleOne.Three = "My value is Three "
BookTwo.ModuleTwo.TwoThree = "My value: Two-Three"
End Sub
Public Sub PrintGlobal()
Dim Number As Integer
Debug.Print ("Работает процедура PrintThree")
Number = BookOne.ModuleOne.Plus1(2)
Debug.Print ("Это книга " & Number)
ChangeGlobal
BookTwo.ModuleTwo.PrintGlobal
End Sub
Приведем результаты отладочной печати, полученные при нажатии кнопки PrintGlobal в книге BookThree:
Работает процедура PrintThree
Это книга 3
Работает процедура PrintTwo
Печать глобальных переменных
My value: Two-Three
Это книга 2
Работает процедура PrintOne
Печать глобальных переменных
My value is One -My value is Two -My value is Three
Допустимы ссылки на ячейки различных рабочих книг!
BookOne
BookTwo
BookThree
В заключение приведем вид окна проектов, где отображены все проекты нашей системы.
увеличить изображение Рис. 2.8. Три проекта One - Two – Three
Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: doc3One.