Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 3:

Документы и проекты

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Система документов 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.

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

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

В заключение приведем вид окна проектов, где отображены все проекты нашей системы.

Три проекта One - Two - Three

увеличить изображение
Рис. 2.8. Три проекта One - Two - Three
< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.