MS Office 2000 для разработчиков
Взгляд первый
— Какое лучшее средство от любви с первого взгляда?
— Взглянуть во второй раз!
Новшества обычного MS Office 2000
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). Насколько широки и полезны возможности этой утилиты (и содержащихся в базе данных кодов), нужно еще разбираться, но два момента можно отметить уже сейчас:
- Подобная организация просмотра программного кода и перемещения по иерархической структуре модуля — это как раз то, чего давно не хватает в среде разработки VB/VBA. Примерно в таком виде и должно быть реализовано окно Project Window.
- Чего явно недостает в нынешнем варианте утилиты: в правом нижнем окне желательно видеть не краткое описание хранимого элемента библиотеки, а его полное содержимое (как это делается в почтовых клиентах: справа — дерево папок, слева — список писем в папке, а снизу — содержимое текущего письма).
Остальные расширения представляют собой специализированные «мастера». Инструменты 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/).
Что же касается электронной справки, то здесь дела обстоят еще сложнее и нам бы хотелось выделить несколько проблем:
- В этом обилии информации очень трудно ориентироваться и найти то, что нужно. Создается впечатление, что в переплетениях связей запутались сами авторы. Довольно много ошибок.
- Несмотря на рост мощности компьютера, быстродействие работы справочной системы неуклонно падает.
- Объем информации увеличивается, но содержимое по конкретным темам сокращается. Именно поэтому крайне желательно сохранять документацию (и бумажную и электронную) по всем предыдущим версиям. Мы, например, в своей работе часто используем справки не только VB 3, но и QB 4.5 — описание «старых» тем там гораздо лучше.
- Что самое удивительное — сокращается функциональность справки.
Остановимся подробнее на последних двух вопросах (на примере 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. Одним из отрицательных проявлений этой ситуации являются многочисленные проблемы при работе с единой электронной справочной системой.
И еще два ключевых вывода:
- Вряд ли Microsoft прислушается к высказанным здесь пожеланиям. Единственный серьезный аргумент для радикального улучшения продукта — наличие серьезных конкурентов. Конкуренты, отзовитесь!
- В большинстве своем методические пособия по технологии для Visual Basic теперь годятся и для MS Office 2000. Читайте наши публикации по Web-программированию, технологиям ADO, обработке строковых переменных и т.д., опубликованных в КомпьютерПресс! Их список можно найти по адресу www.visual.2000.ru/develop/vb/.
КомпьютерПресс 12'1999