Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 2720 / 260 | Оценка: 4.03 / 3.74 | Длительность: 19:48:00
Специальности: Программист, Менеджер
Лекция 6:

Офисное программирование. Специфика и примеры

Перенос игры в чистый VB

Я уже говорил, что одно из достоинств документов типа "обложка", что они сравнительно легко переносятся в другие программные среды. Проще всего, программный проект, сделанный на VBA и находящийся под обложкой одного из документов Office 2000, перенести в чистый VB. Для этого не потребуется почти никаких усилий. Этим мы сейчас и займемся. Наш программный проект состоит из одной формы WGCForm и одного стандартного модуля WGCModule. Нет никаких проблем, чтобы экспортировать эту форму и модуль, сохранив их в виде файлов с уточнениями frm и bas соответственно. Для этого достаточно выбрать пункт ExportFile из главного меню File или из контекстного меню, доступного при нажатии правой кнопки на модуле или форме в окне проекта. После того, как форма и модуль сохранены, они могут быть импортированы в любой из документов Office 2000, где начнут работать под другой обложкой. Более интересно, что точно также они могут быть импортированы в чистый VB, что я и сделал. Взгляните, как выглядит проект VB после переноса в него нашей формы и модуля.

Проект WGC, перенесенный в среду VB6

увеличить изображение
Рис. 6.4. Проект WGC, перенесенный в среду VB6

Следует обратить внимание на то, что формы VB и VBA это все-таки разные формы для VB. Формы VBA загружаются в среде VB специальным загрузчиком таких форм ActiveX Designer MSForms. Этот дизайнер включен во все версии VB6, поэтому на компьютере достаточно иметь VB и нет необходимости в существовании Office 2000. Подобно всем другим дизайнерам VB он имеет собственную динамически подключаемую библиотеку (run time dll). Это приводит к увеличению накладных расходов, но сам перенос осуществляется без проблем. Теперь, имея проект на VB, можно использовать все преимущества этой среды, сохранив наш проект, например, в виде исполняемого exe - файла, в виде DLL или в виде ActiveX Control.

Следует сделать одно важное замечание, связанное с переносом в VB. Мне все-таки пришлось внести одно изменение в программный текст, прежде, чем проект заработал. Это изменение связано с объектом DataObject. Дело в том, что в VBA - проекте я использовал этот объект, не уточнив его полное имя. По умолчанию предполагалось, что речь идет об объекте DataObject библиотеки MSForms. Когда же проект стал компилироваться в чистом VB, то по умолчанию этот объект стал восприниматься, как объект VB и здесь возникла некоторая путаница. Хотя язык VB позволяет работать с визуальными объектами библиотеки MSForms, он имеет и собственную, весьма похожую библиотеку визуальных объектов. Замечу, что объект DataObject существует в этой библиотеке и, выполняя практически те же функции, является более мощным объектом. Вместо методов GetText и SetText он обладает методами GetData и SetData, способными передавать не только текст, но и данные более сложной структуры, в том числе метафайлы и графические файлы с уточнением bmp. Конеч но, я не стал переписывать текст, работая с новым, более мощным объектом VB. Я всюду в тексте заменил DataObject на полное имя MSForms.DataObject. После чего все заработало, как нужно.

Несколько слов об обратном переносе программных проектов из VB в VBA. Такой перенос возможен, хотя выполняется сложнее. Прежде всего, замечу, что формы VB не переносятся напрямую в VBA. Для того, чтобы из VB перенести форму, необходимо разрабатывать ее, используя ActiveX Designer MSForms. Ну и, конечно, нужно следить за тем, чтобы реализация не использовала такие объекты VB, для которых нет точных аналогов в VBA, например, не следует в реализации использовать возможности объекта DataObject, принадлежащего чистому VB.

Создание документов "вручную". Программирование без программирования

Документы типа "ручная работа"

Я уже говорил о том, что офисному программисту приходится начинать свою работу над документом не с нуля. Зачастую, документ в значительной своей части создан вручную и обладает широким спектром стандартных возможностей. Задача программиста состоит в том, чтобы придать документу новые возможности, учитывающие специфику решаемых задач. Документы, созданные вручную и не требующие программирования или требующие его лишь в малой степени, я и называю документами типа "ручная работа". Хотя с позиций офисного программирования такие документы представляют крайний, предельный случай и менее интересны, чем "настоящие", "сшитые на заказ" документы, но нужно отчетливо понимать, что документы " ручной работы" широко распространены. Чаще всего такие документы создают сами пользователи, но иногда эту работу необходимо выполнять и программисту. Созданию и работе с такими документами посвящено большое количество книг и статей, адресованных пользователям. Это отдельная и большая тема, выходящая за пределы рассматриваемых мной вопросов, но полностью обойтись без их рассмотрения не удается, поскольку это естественная часть работы офисного программиста. Поэтому я хочу рассмотреть один пример создания документа подобного рода, а главное, поговорить о том, что для таких документов иногда возможно создание программного проекта без явного программирования, используя возможности такого средства как упоминавшийся мной MacroRecorder.

Создание электронного бланка "СЧЕТ - ФАКТУРА"

Разработка электронной формы бланка заказа.

В офисе работают с людьми и с документами. Оставим в стороне людей и займемся документами. В современном офисе документы имеют электронную форму. Давайте рассмотрим все этапы создания документа в электронной форме на примере бланка "СЧЕТ-ФАКТУРА" - типичного документа многих офисов. Будем создавать этот документ вручную, не прибегая к программированию, используя только стандартные возможности Office 2000. Конечно же, используя программирование на VBA, этот документ можно сделать куда более содержательным, например, связав его с базой данных. Но отложим рассмотрение этих вопросов на будущее и сосредоточимся на работе вручную и автоматическому получению макросов, запуск которых будет повторять работу, которую мы будем делать руками.

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

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

Следуя этим советам, я создал эскиз бланка "СЧЕТ-ФАКТУРА". Конечно, для таких бланков есть зафиксированный стандарт. Я не стал строго следовать этому стандарту, поскольку преследую другие цели. Тем не менее, возможно, что бланк, который будет построен, может послужить шаблоном для создания "настоящего" бланка "СЧЕТ-ФАКТУРА". Наш бланк будет содержать:

  • Шапку, включающую логотип, название и реквизиты офиса (поставщика). Шапка - постоянная часть многих бланков офиса формируется автоматически, не требуя от пользователя, работающего с бланком, каких-либо действий; она может быть общей для многих бланков;
  • Реквизиты покупателя; эта переменная часть бланка заполняется при каждом оформлении заказа.
  • Данные о грузоотправителе и грузополучателе.
  • Таблица заказа - основная часть бланка заказа. Ее поля содержат сведения о заказываемом товаре: название, цену за единицу, количество заказанных единиц, общую стоимость и другие данные.
  • Утверждающие подписи
  • Пожалуй, достаточно. На этих составных частях нашего бланка мы пока и остановимся. С одной стороны, здесь есть все главные части, с другой стороны, подробное обсуждение того, как они создаются, потребует немалого времени. Чтобы легче воспринимать дальнейшее обсуждение, давайте взглянем на эскиз электронного бланка
Эскиз электронного бланка

Рис. 6.5. Эскиз электронного бланка

Конечно, внимательный читатель понял, что перед ним не "бумажный" рисунок, а реальный документ, разработанный средствами Office. Но в каком из приложений он создан? Мог ли он догадаться, что перед ним рабочая страница Excel? Аналогичный бланк можно было бы создать и в других приложениях Office таких, как Word и Access. Сейчас я подробно опишу, как был создан в Excel подобный шаблон, отступая, возможно, в некоторых деталях, так что окончательный результат будет немного отличаться от показанного на рисунке.