Система документов 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
Поскольку все три документа устроены одинаково, то достаточно привести тексты одного обработчика и двух процедур, задающие специфику работы в проекте этого документа:
Пример 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