18c0693f

Обмен информацией между документами


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



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

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


Рис. 2.6.  Открытие рабочей книги, содержащей ссылки

Поскольку в данной рабочей книге есть ссылки на другие рабочие книги, то при открытии документа появляется сообщение о том, что, возможно, следует обновить документ, поскольку после его закрытия могли измениться документы, на которые он ссылается.


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

Пример 2.3.

(html, txt)

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

Public Sub PrintGlobal() Dim MyrOne As Range, MyrTwo As Range, MyrThree As Range

Debug.Print ("Работает процедура PrintOne") Debug.Print ("Печать глобальных переменных") Debug.Print (One & "-" & Two & "-" & Three)

Debug.Print ("Допустимы ссылки на ячейки различных рабочих книг!") Set MyrOne = Range("[BookOne.xls]Sheet1!D1") Debug.Print MyrOne Set MyrTwo = Range("[BookTwo.xls]Sheet1!D1") Debug.Print MyrTwo Set MyrThree = Range("[BookThree.xls]Sheet1!D1") Debug.Print MyrThree MsgBox ("Everything is OK! Look at Immediate Window") End Sub

Вот результаты отладочной печати в конце работы этой процедуры:

Работает процедура PrintOne Печать глобальных переменных My value is One -My value is One -My value is One Допустимы ссылки на ячейки различных рабочих книг! BookOne BookTwo BookThree

Всем глобальным переменным предварительно было присвоено одно и то же значение. Книги BookOne, BookTwo, BookThree.xls на первой странице в ячейке D1 хранят свои названия, их и печатает наша процедура, вызываемая в проекте одной из этих книг.



Можно видеть, что доступ к информации не представляет трудностей.

Public Sub PrintGlobal() Dim MyrOne As Range, MyrTwo As Range, MyrThree As Range

Debug.Print ("Работает процедура PrintOne") Debug.Print ("Печать глобальных переменных") Debug.Print (One & "-" & Two & "-" & Three)

Debug.Print ("Допустимы ссылки на ячейки различных рабочих книг!") Set MyrOne = Range("[BookOne.xls]Sheet1!D1") Debug.Print MyrOne Set MyrTwo = Range("[BookTwo.xls]Sheet1!D1") Debug.Print MyrTwo Set MyrThree = Range("[BookThree.xls]Sheet1!D1") Debug.Print MyrThree MsgBox ("Everything is OK! Look at Immediate Window") End Sub

Вот результаты отладочной печати в конце работы этой процедуры:

Работает процедура PrintOne Печать глобальных переменных My value is One -My value is One -My value is One Допустимы ссылки на ячейки различных рабочих книг! BookOne BookTwo BookThree

Всем глобальным переменным предварительно было присвоено одно и то же значение. Книги BookOne, BookTwo, BookThree.xls на первой странице в ячейке D1 хранят свои названия, их и печатает наша процедура, вызываемая в проекте одной из этих книг.