MS Office 2000 для разработчиков

Взгляд первый

Андрей Колесов, Ольга Павлова

 

— Какое лучшее средство от любви с первого взгляда?
— Взглянуть во второй раз!

С чего все это начиналось

Новшества обычного MS Office 2000

Access 2000 и MSDE

VBA так похож на VB — но это все же не VB

Теперь об Office 2000 Developer

Документация

Выводы

  VBA SDK 6.1 и стратегия его продвижения

  Защита от макровирусов в Office 2000

 

В этой статье мы хотим бросить именно «первый взгляд» на новшества MS Office 2000, с точки зрения разработчика. (См. обзор новых функций Office 2000 для пользователя в статье Алексея Федорова «Office 2000» КомпьютерПресс № 3’99.) Почему именно так? Потому что вопросы разработки приложений в среде Office 2000 мы будем рассматривать в последующих публикациях на эту тему, а быстро оценить реальные достоинства инноваций нового офисного пакета Microsoft довольно сложно. С одной стороны, в документации о них говорится скупо и очень запутанно (эта информация нужна хотя бы для того, чтобы составить исходный список новинок, с которыми нужно ознакомиться). С другой стороны, действительность порой заметно отличается от описания. Поэтому для понимания отличия разных вариантов продукта нужно исследовать каждый из них. Мы же пока находимся в самом начале пути.

Цель данной статьи — попробовать понять, чем может быть интересен разработчику Office 2000. Для этого по ходу изложения мы рассмотрим такие вопросы:

1. Что нового дает Office 2000 по сравнению с Office 97? (Краткий ответ: довольно много.) Имеются ли различия в английской и русской версиях Office 2000? (К сожалению, здесь обнаружены ошибки.)

2. Какие дополнительные возможности предоставляет редакция MS Office 2000 Developer Edition (MOD 2000)? (Программисты найдут полезные для себя инструменты, которые, возможно, у них уже есть.)

3. Полезны ли эти новшества пользователям других инструментальных средств, например обычного VB? (Да, но...)

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

С чего все это начиналось

Чтобы оценить новую версию офисного пакета Microsoft, следует кратко вспомнить историю этого семейства. С точки зрения разработчика, развитие MS Office проходило по следующим основным направлениям:

  • реализация унифицированной иерархической объектной модели на основе OLE Automation (ActiveX);
  • создание единого внутреннего механизма программирования приложений на основе VBA;
  • интеграция с другим средствами разработки Microsoft, в первую очередь с Visual Basic.

Впервые в достаточно законченном варианте эти задачи были решены в MS Office 97 (подробнее см. «Microsoft Office 97 — инструмент для разработчиков бизнес-приложений» www.visual.2000.ru/develop/vb/artciles.htm). Именно тогда появился единый языковой механизм VBA и среда разработки Visual Basic Editor, которые, в свою очередь, фактически превратились в специфическую редакцию универсальной системы VB 5.0.

Более того, Microsoft стала активно продвигать VBA в качестве стандарта отрасли для управления программируемыми приложениями, объявив о возможности его лицензирования. С выходом MS Office 2000 корпорация выпустила новый VBA SDK и серьезно расширила эту партнерскую программу (подробности см. «VBA SDK 6.1 и стратегия его продвижения»).

Но полного решения перечисленных выше задач в MS Office 97 не было достигнуто:

1. VBA 5.0 использовался только в трех приложениях: Word, Excel и PowerPoint. Программа Outlook имела объектную модель, которой можно было управлять только извне с помощью, например, VB или VBScript. СУБД Access по-прежнему использовала собственный вариант Basic и свою среду разработки.

2. Несмотря на весьма значительную унификацию интерфейса и объектных моделей, реализация казалось бы одинаковых функций (например, команды «Настройка» (Customize)) в разных пакетах различалась. Но самое главное — каждый пакет имел не только собственный формат хранения расширений, но и свою специфическую логику их создания. (Мы это показали на примере Word 97 и Excel 97 в статьях, опубликованных в КомпьютерПресс № 1, 12 и 4’99.)

3. Среда VBE была, вроде бы, очень похожа на VB 5.0, но на самом деле отличалась от «старшего брата». Дело было даже не в отсутствии каких-либо возможностей (что как раз вполне понятно), а в различном исполнении одних и тех же функций. К сожалению, такая же ситуация в значительной степени сохранилась и в Office 2000.

Новая версия MS Office 2000 заметно продвинулась в решении трех этих проблем, но до идеала все еще очень далеко.

В начало

В начало

Новшества обычного MS Office 2000

Здесь мы рассмотрим те новые элементы программирования, которые пользователи смогут наблюдать собственно в среде приложения (см. табл. 2), а о VBA поговорим потом.

Число автономных приложений в составе Office расширилось: к привычным Access, Excel, Outlook, PowerPoint и Word прибавились известный HTML-редактор FrontPage (ранее не входивший в состав пакета) и новые PhotoDraw, Publisher и Small Business Customer Manager. Соответственно, увеличилось и число вариантов поставок продукта (см. табл. 1). Для русского языка локализованы все приложения, которые входят в состав выпуска Professional, но среда VBA и его Справка существуют только в английском варианте.

Следует отметить также, что функциональность конкретного приложения не зависит от варианта выпуска, например Word и VBA совершенно одинаковы и в Standard, и в Premium.

С точки зрения программирования наиболее важным является то, что расширилось число приложений, использующих единый механизм программирования и среду VBA: к Excel, PowerPoint и Word добавились Access, Outlook и FrontPage.

Одно из ключевых новшеств — единая для всех приложений модель подключения программных расширений на основе технологии COM Add-In. Такие расширения представляют собой ActiveX DLL, подключение которой к программе выполняется через специальный интерфейс IDExtensibility2. Этот механизм должен серьезно помочь разработчикам в создании бизнес-приложений и универсальных дополнительных средств для MS Office, и мы обязательно рассмотрим возможности его применения в последующих статьях.

Вместе с тем нам показалось, что в Office 2000 не сделаны необходимые шаги для устранения различий в моделях создания программных проектов для документов и шаблонов в разных офисных приложениях (что отмечалось выше на примере Office 97). Этот вопрос также требует дополнительного изучения.

Пользователь может обнаружить новшества и в редакторе сценариев (рис. 1), который запускается командой Tools|Macros|Script Editor (Средства|Макро|Редактор сценариев). Script Editor обеспечивает создание сложных программируемых HTML-страниц, однако с его реальными возможностями нужно еще разбираться.

Новинкой является и появление дополнительных средств защиты от вирусов. Одно из них предназначено для применения непосредственно конечным пользователем: использование механизма сертификации VBA-проектов, включенных в документ с помощью электронной подписи. Вариант, реализованный в Office 2000, безусловно будет очень полезен, однако пока он представляется довольно «сырым»: разработчики не предусмотрели ряд довольно простых функций, которые нужны в практической работе (см. врезку «Защита от макровирусов»). К тому же в русской версии этот механизм содержит ошибки (и работает только на 50 процентов).

В начало

В начало

Access 2000 и MSDE

Здесь мы не будем подробно останавливаться на новшествах Access 2000: во-первых, в отличие от других офисных пакетов, этот продукт фактически изначально является средством разработки, и его функциональность нужно обсуждать отдельно (так же как и новые прикладные возможности других приложений), а во-вторых, нас нельзя назвать знатоками этого продукта. Поэтому отметим кратко только некоторые моменты:

1. Специфический язык Access Basic полностью заменен на универсальный VBA. Среда VBE используется для программирования макросов и модулей кода. В то же время Access использует собственный набор форм и механизм их формирования.

2. В Access применяется новый вариант механизма доступа к данным Jet 4.0, который теперь обеспечивает поддержку UNICODE, блокировку на уровне строк, встроенный механизм OLE DB, двустороннее тиражирование Jet/SQL Server 7 и ряд других функций. В то же время он может использовать новое средство MSDE (Microsoft Data Engine), которое по существу является настольной версией SQL-сервера и обеспечивает гибкий переход в случае необходимости к полнофункциональному SQL Server 7.0. Microsoft рекомендует применять Jet 4.0 для создания систем с числом пользователей до 10-15, а MSDE — до 50. MSDE входит в состав Developer и может свободно распространяться. Освоение MSDE интересно тем, что он, скорее всего, заменит собой традиционный Jet.

3. В Access 2000 используется измененный формат файлов MDB. Старые базы данных могут читаться и преобразовываться, но записываться будут только в новом виде.

В начало

В начало

VBA так похож на VB — но это все же не VB

Как утверждает Microsoft, в Office 2000 исчезла грань, разделявшая ранее VBA и VB. Это означает, что в VBA 6 появились не только новые функции VB 6, но и некоторые возможности, которые были в VB 5, но отсутствовали в VBA 5. Некоторые новшества VBA 6 приведены в табл. 2. Кроме того, их список можно найти в документации (рис. 2), но этот перечень явно не полный, так что лучше просто изучать VB 6.

Декларация о тождественности VBA и VB — это, конечно, замечательно, но возникает вопрос: что же, собственно говоря, понимается под термином «Visual Basic»? Проблема заключается в том, что в современных средствах программирования весьма сложно четко разделить язык программирования и среду программирования. С учетом же этого положения оказывается, что до равнозначности VBA и VB еще очень далеко, в результате чего у разработчика возникают не только неудобства, но и серьезные проблемы. Чтобы разобраться в этом, переместимся в среду VBE (на примере Word 2000), а заодно откроем VB 6.0.

В VBE (пока мы не говорим о выпуске Developer) мы обнаружим не так много нового по сравнению с Office 97. Единственное отличие — в меню Tools появилась команда Digital Signature для цифровой подписи проекта.

Теперь сравним VBE 6 и VB 6: они очень похожи, но при этом заметны и различия, которые никак не связаны со спецификой каждого из продуктов. Например, меню Insert (VBE) в VB называется Project, команда Reference находится в другом меню и т.д.

Со времен Office 97 VBA (точнее, конструктор MS Form 2.0) включает очень полезную функцию Tab Order, которая вызывается из меню View или контекстного меню формы. С ее помощью существенно упрощается задача изменения порядка прохода элементов управления формы при нажатии клавиши Tab (рис. 3). В VB такой функции нет.

Казалось бы, ерунда, но различие в мелочах требует подвергнуть сомнению тождественность двух инструментов. И это создает проблемы при изучении документации. Действительно, Microsoft пытается унифицировать документацию по VB/VBA. В книгах и электронной справке сейчас говорится только о VB, но понять, где о какой версии говорится, порой довольно сложно (различия-то имеются!). Не говоря уже о совместимости электронных справок, о которой речь пойдет ниже.

Дальше — больше! Выясняется, что совместимость программных компонентов между VBA и VB обеспечивается только для модулей кода BAS. Для форм такой совместимости нет. То есть модуль формы frmVB.frm (созданной в VB), нельзя загрузить в VBA, а frmVBA.frm (созданной в VBA) — соответственно в VB. Конверторов для преобразования форматов не существует, а сделать самим это очень сложно — служебная информация о frmVBA.frm хранится в отдельном двоичном файле FRX...

VBA использует собственный конструктор Form 2.0, формат файлов которого отличается от того, что используется в среде VB. Правда, последний позволяет подключать Form 2.0 и таким образом читать frmVBA.frm, но это не самое лучшее решение проблемы совместимости.

Одновременное использование двух конструкторов форм в VB (встроенного VB и Form 2.0 VBA) позволяет наглядно продемонстрировать еще некоторые удивительные вещи (рис. 4). Каждый из них имеет свою собственную панель инструментов, и дело тут не в числе используемых компонентов. Проблема в том, что одинаковые инструменты имеют различные значки, названия объектов (обратите внимание на названия командных кнопок на форме, устанавливаемых по умолчанию) и даже технологию их визуального размещения и редактирования на форме. Но и это еще не все: одинаковые по смыслу объекты (та же форма) имеют разные наборы событий, свойств и методов.

Так было в VB/VBA 5, такая же ситуация, к сожалению, осталась и в VB/VBA 6. Так что говорить об идентичности VB и VBA пока рано.

В начало

В начало

Теперь об Office 2000 Developer

Краткое описание дополнительных возможностей MOD 2000 приведено в табл. 3. На наш взгляд, принципиальным новшеством является возможность создания автономного VBA-проекта: ранее программный код мог включаться только в состав документа или шаблона того или иного офисного приложения.

После установки Office 2000 Developer Tools в меню File среды VBE добавляются сверху две команды: New Project и Open Project. Выбрав первую, вы увидите окно с различными вариантами проектов (рис. 5). Как мы понимаем, Empty Project позволяет создавать ActiveX DLL (библиотеку ActiveX-объектов) с достаточно широкими возможностями (хотя их меньше, чем в VB6), в том числе нечто подобное Web- и DHTML-приложениям (что именно — нужно еще разбираться). Такие библиотеки, по-видимому, можно использовать не только в рамках офисных приложений.

Add-In Project обеспечивает создание того самого универсального расширения COM Add-In, о котором мы уже говорили. Представляется вполне вероятным, что в скором будущем эта технология подключения дополнений будет использоваться в качестве стандартного механизма для более широкого круга программ. Кроме того, конструктор COM Add-In из состава MOD 2000 может использоваться в VB 6 и VB 5 (но в последнем случае новая функция подключается довольно хитрым способом).

Исходный код проектов хранится в виде двоичных VBA-файлов (которые, конечно же, не читаются в VB 6).

MOD 2000 также содержит набор компонентов для работы с базами данных на основе технологии OLEDB/ADO. Сама библиотека ADO 2.1 (самая свежая версия) содержится в основной поставке Office. Эти возможности уже знакомы VB-программистам, и мы можем только рекомендовать читателям обратиться к уже опубликованным материалам. Но отметим, что в MOD 2000 явно не хватает полезных инструментов типа VisData и Visual Data Tools, которые уже давно имеются в VB.

Разработчикам, по-видимому, будет полезен и набор конструкторов Add-In, которые появляются в окне Add-In Manager (рис. 6), также давно существующем в VB, после установки MOD 2000.

Безусловный интерес представляет утилита VBA Code Librarian, обеспечивающая работу с иерархической библиотекой исходных текстов (там могут быть не только программные коды) и предназначенная не только для VB-программистов. С программой поставляется довольно большая база данных CodeLib.mdb от Microsoft (рис. 7). Насколько широки и полезны возможности этой утилиты (и содержащихся в базе данных кодов), нужно еще разбираться, но два момента можно отметить уже сейчас:

  1. Подобная организация просмотра программного кода и перемещения по иерархической структуре модуля — это как раз то, чего давно не хватает в среде разработки VB/VBA. Примерно в таком виде и должно быть реализовано окно Project Window.
  2. Чего явно недостает в нынешнем варианте утилиты: в правом нижнем окне желательно видеть не краткое описание хранимого элемента библиотеки, а его полное содержимое (как это делается в почтовых клиентах: справа — дерево папок, слева — список писем в папке, а снизу — содержимое текущего письма).

Остальные расширения представляют собой специализированные «мастера». Инструменты Package and Deployment Wizard и WinAPI Viewer уже хорошо известны, а VBA Source Code может быть полезен при использовании Visual SourceSafe. Ценность же остальных мастеров (Code Comment, Error Handler, Multi-code Import/Export и String Editor) не очень ясна — нам кажется, что опытный разработчик выполнит подобные операции «вручную» быстрее. Но это, конечно, дело вкуса и привычки.

Однако самым важным нам представляется другой вопрос: если VBA теперь позволяет работать в своей среде с подобными расширениями, то можно ли использовать Add-Ins из состава VB (их там довольно много) в VBA и наоборот? К сожалению, наш ответ пока отрицательный (к вопросу о совместимости!).

В VB описан механизм подключения новых Add-Ins в среду, и нам удалось интегрировать новые VBA-мастера в VB, но не более: расширения не хотели загружаться, выдавая сообщение «Type mismatch» (несовпадение типов). Такое поведение «мастеров» еще можно понять, но почему не запускалась автономная утилита Code Librarian — непонятно. (Тем не менее ее можно загрузить отдельно из командной строки или главного меню Windows.)

Что касается других дополнений MOD 2000 (разделы «Приложения для разработчика» и «Дополнительные средства» в табл. 3), то они не нуждаются в особых комментариях. Очевидно, что без Runtime-модулей нельзя обойтись при создании коммерческих приложений на Access. Если говорить о приложениях, то в первую очередь может понадобиться HTMLHelp Workshop. Но нужно помнить, что эти средства можно приобрести и отдельно, причем ваш выбор не обязательно падет на продукты Microsoft.

В начало

В начало

Документация

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

Типичный пример — новая книга «Руководство программиста по VB для MS Office 2000». С одной стороны, она содержит очень много новой информации по сравнению с аналогичным томом из Office 97 Developer, а с другой — некоторые полезные главы из старой книги просто не попали в новый вариант документации, иные же приведены в сильно сокращенном виде. В связи с этим наш совет однозначный: если вы собираетесь программировать в среде Office 2000 (даже в рамках обычной версии), то обязательно разыщите книгу из Office 97 (ее русский перевод был издан «Русской Редакцией» два года назад — см. www.visual.2000.ru/develop/vb/booksvba/).

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

  1. В этом обилии информации очень трудно ориентироваться и найти то, что нужно. Создается впечатление, что в переплетениях связей запутались сами авторы. Довольно много ошибок.
  2. Несмотря на рост мощности компьютера, быстродействие работы справочной системы неуклонно падает.
  3. Объем информации увеличивается, но содержимое по конкретным темам сокращается. Именно поэтому крайне желательно сохранять документацию (и бумажную и электронную) по всем предыдущим версиям. Мы, например, в своей работе часто используем справки не только VB 3, но и QB 4.5 — описание «старых» тем там гораздо лучше.
  4. Что самое удивительное — сокращается функциональность справки.

Остановимся подробнее на последних двух вопросах (на примере MOD 2000). Еще установив в свое время VB 6.0, мы столкнулись с тем, что справка VB 5.0 частично перестала работать. Сейчас нечто подобное произошло и с MOD 2000: после установки MSDN Library Office 2000 Developer именно эта библиотека стала вызываться при обращении к справке в VB 6.0, хотя такое обновление по разным причинам нам крайне нежелательно.

Что же касается потери функциональности, то мы предлагаем читателям сравнить справки по функции StrConv, полученные в VB 4.0, VB 5 и VBA 6.0 (рис. 8, слева направо). Отличия очевидны: в VB 5 в окне пропала одна линейка меню (и команда Bookmark), в VBA 6 — вторая (команды Copy, Annotate и ряд других). Это кажется фантастикой для многих современных пользователей, но еще в не столь давние времена можно было одним щелчком мыши копировать текст, делать закладки, пополнять Справку собственными комментариями, выбирать удобное представление текста и пр.

Все сказанное здесь относится не только к средствам разработки, но и к справочным системам самих офисных пакетов.

В начало

В начало

Выводы

Теперь попробуем сформулировать основные выводы из нашего обзора, ответив на четыре приведенных в начале статьи вопроса:

1. Основные новшества Office 2000 (обычной редакции) для разработчика следующие:

  • Теперь практически все ключевые приложения семейства Office поддерживают единый механизм программирования на базе VBA.
  • Реализована единая модель подключения расширений в виде архитектуры COM Add-In. Однако пока отсутствует единообразие в реализации расширений, ориентированных на конкретное приложение.
  • Значительно расширены возможности использования Internet и HTML. В частности, появился интегрированный в Office редактор сценариев.
  • Появился очень нужный механизм защиты от вирусов. Однако для практического применения функциональность реализованного варианта желательно расширить. В русской версии нужно устранить ошибки.
  • Программный механизм VBA, кажется, действительно стал идентичным обычному VB.
  • Для работы с базами данных можно использовать новейшие технологии Microsoft OLEDB/ADO.
  • Access 2000 использует новый механизм доступа к базам данных Jet 4.0.

2.Дополнительные возможности редакции MS Office 2000 Developer Edition представляют интерес в первую очередь для тех, кто делает достаточно серьезные бизнес-приложения, предназначенные для распространения (внутрифирменного или коммерческого). Здесь можно выделить следующее:

  • Создание автономных VBA-проектов (библиотек ActiveX DLL) и специальных расширений COM Add-In для приложений Office.
  • Возможность использования в среде VBA дополнительных ActiveX-конструкторов. Наличие набора таких конструкторов в составе MOD 2000.
  • Наличие полезных утилит и «мастеров», среди которых стоит особо выделить программу Code Librarian. Но для практического применения их функциональность требует расширения.
  • Модули поддержки для дистрибьюции Access-приложений. Новый прогрессивный механизм работы с базами данных MSDE.
  • Дополнительные инструменты для групповой разработки и создания справочных систем на базе технологии HelpHTML.
  • Дополнительная документация. Однако электронная справочная система требует радикального улучшения.

3. Какие новшества MOD 2000 будут полезны для пользователей других средств разработки, например обычного VB?

Пока очевидна полезность только одного инструмента — конструктора COM Add-In. Дополнительные мастера и утилиты MOD 2000 не работают в VB. К сожалению, провозглашенная идентичность языков VB и VBA не сопровождается совместимостью на уровне форматов исходных модулей приложений и техники работы в среде VB и VBE. Одним из отрицательных проявлений этой ситуации являются многочисленные проблемы при работе с единой электронной справочной системой.

И еще два ключевых вывода:

  1. Вряд ли Microsoft прислушается к высказанным здесь пожеланиям. Единственный серьезный аргумент для радикального улучшения продукта — наличие серьезных конкурентов. Конкуренты, отзовитесь!
  2. В большинстве своем методические пособия по технологии для Visual Basic теперь годятся и для MS Office 2000. Читайте наши публикации по Web-программированию, технологиям ADO, обработке строковых переменных и т.д., опубликованных в КомпьютерПресс! Их список можно найти по адресу www.visual.2000.ru/develop/vb/.

КомпьютерПресс 12'1999