Инструменты VBA-разработчика в Microsoft Office 2000 DeveloperИсточник: Microsoft Андрей Колесов, Ольга Павлова
В обзоре новшеств Microsoft Office 2000 для разработчиков (см. "КомпьютерПресс" N 12/99, с. 169) мы упоминали о том, что в составе версии Developer Edition (ODE 2000) имеется целый ряд дополнительных средств для программистов. Сам продукт ODE 2000, который поставляется только в англоязычном варианте, представляет собой комплект компакт-дисков версии Premium, а также дополнительно диска Developer и трех дисков MSDN Library. Установка средств Developer производится автономной программой Setup (мы, например, выполнили их подключение к русской версии MS Office 2000 Premium), которая предлагает три группы компонентов:
Следует обратить внимание, что при необходимости перестановки группы Developer Tools нужно запускать автономную программу инсталляции ACMBOOT.EXE. В этой статье мы расскажем об использовании VBA-дополнений (Add-Ins), которые входят в состав группы Developer Tools (рис. 1).
Рис. 1 Примечание. Для того чтобы в полной мере использовать возможности дополнения VBA Source Code Control, необходимо предварительно установить и сконфигурировать систему контроля версий Visual SourceSafe, которая также находится на установочном диске Developer в группе Applications.
Подключение дополнений в среде VB и VBAПрежде чем перейти к обзору инструментов, поставляемых в составе ODE 2000, рассмотрим некоторые общие вопросы создания и использования расширений среды программирования. Для разработки дополнительных инструментов (Add-Ins)-- утилит, мастеров, конструкторов, -- предназначенных для последующей интеграции в среду разработки VBE, используется специальная технология создания компонентов типа ActiveX-серверов. В данном случае мы используем термин VBE (Visual Basic Environment), чтобы подчеркнуть, что данная среда реализуется в виде очень похожих, но все же различных вариантов - обычного VB , а также VBA в составе MS Office. При работе с Add-Ins этот не очень понятный подход Microsoft выглядит таким образом, что технология создания и регистрации этих дополнения для VB и VBA несколько различаются. С точки же зрения пользователя это означает, что Add-Ins, имеющиеся в составе VB 6.0 не могут использоваться в Office/VBA 2000 Developer и наоборот. Однако процедура работы с дополнениями в обеих системах выглядит одинаково. Управление работой набора Add-Ins выполняется с помощью менеджера дополнений, вызываемого командой Add-Ins/Add-In Manager. В Office/VBA 2000 такая команда появляется только после установки Developer Tools с инсталляционного диска ODE 2000. После обращения к менеджеру дополнений появляется диалоговое окно, в котором представлены все зарегистрированные Add-Ins (рис. 2).
Рис. 2 В правой колонке этого списка указан режим загрузки каждого Add-In, который устанавливается с помощью трех флажков секции Load Behavior в правом нижнем углу окна: Loaded/Unloaded - немедленное подключение или отключение дополнения к среде VBE. Эта операция может также выполнятся двойным щелчком мыши названия модуля непосредственно в списке. Как правило, операция подключения дополнения заключается в появлении соответствующей команды в меню Add-Ins, с помощью которой уже производится непосредственный запуск данной программы на выполнение. Установка Loaded/Unloaded действует только во время текущего сеанса работа со средой VBE. Load on Startup - автоматическое подключение дополнения во время запуска VBE. Вы можете отключить эту программу в текущем сеансе работы, но если Load on Startup установлен, но при перезагрузке VBE расширение опять будет подключено. Command Line - обеспечивает подключение дополнения при запуске cреды разработки с помощью командной строки (может использоваться только при работе с VB). Теперь перейдем к обзору инструментов ODE 2000.
VBA Code CommenterЭто дополнение позволяет создавать в процедурах проектов комментарии, которые обычно включают имя автора, дату и время создания, историю проекта, параметры и другие данные. VBA Code Commenter помещает такую информацию в начало процедуры, а разработчику остается только заполнить пустующие места. Для создания комментариев выполните следующие шаги:
В качестве шаблонов дополнение VBA Code Commenter использует файлы с расширением .eht (формат - простой ASCII-файл), которые можно создавать с помощью любого текстового редактора (рис. 4). В составе ODE2000 имеется пример такого файла CodeCommenter.eht.
Рис. 4
VBA Error HandlerВсем бы нам хотелось, чтобы написанный вами код выполнялся без ошибок, но, к сожалению, на практике это не так. Причем ошибки могут быть связаны, как с неверным кодом (который нужно исправлять), так и какими-то проблемами конкретного пользователя (например, когда он пытается открыть файл, которого просто нет на диске). Поэтому разработчики создают обработчики исключительных ситуаций и ошибок, которые помещают в различные (а иногда и во все) процедуры проекта. Дополнение VBA Error Handler как раз предназначено для того, чтобы свести к минимуму однообразную работу по написанию такого кода. Оно вставляет стандартные шаблоны обработчиков ошибок в исходный текст проекта, а программист добавляет только конкретный код. Технология описания шаблона и обращение к этой утилите полностью аналогичны работе VBA Code Commenter. Единственное отличие - наличие флажка Update existing error handlers, благодаря которому можно обновлять все обработчики ошибок в процедурах, находящихся в диапазоне, который был указан в группе Add Error Handlers To. Примечание. Если VBA Error Handler обнаружит код On Error GoTo Экспорт объектов выполняется примерно аналогичным образом:
Code LibrarianОдин из главный способов повышения производительности программирования является использование готовых фрагментов кодов. Это могут быть какие-то централизованные базы данных, или собственные наборы, создаваемые индивидуальным разработчиком. В состав ODE2000 входит специальная утилита Code Librarian, которая позволят работать с такими хранилищами программных кодов. Она реализована в виде Add-Ins, подключаемого в среду VBA, а также автономной утилиты CodeLib.EXE, которую можно использовать, например, пи работе с VB. Microsoft поставляет также базу данных CodeLib.MDB с большим набором фрагментов исходных текстов, модулей и функций для Office 2000, Visual Basic for Applications (VBA) и систем разработки Visual Studio. Более того с марта 2000 года программисты получили возможность доступа к новому Web-сервису Code Librarian Update, с помощью которого они могут пополнять свой локальный архив повторно используемого кода (Ошибка! Закладка не определена.). Рассмотрим возможности утилиты Code Labrarian на примере работы с базой данных CodeLib.MDB, которая при запуске утилиты в среде VBA загружается автоматически (рис. 10).
Рис. 10 Как мы видим, все компоненты базы данных хранятся с использованием оглавления древовидной иерархической структуры (вкладка Contents в левом окне). В правом верхнем окне находится список компонентов в текущем элементе оглавления, а ниже него - краткое описание выделенного в данный момент компонента. Для просмотра и редактирования содержимого фрагмента кода дважды щелкните его название в списке. Операции с этим фрагментом выполняются с помощью трех вкладок: Code (рис. 11) - в нижнем большом окне приведено содержимое фрагмента, в верхнем поле - его развернутое название. Обратите внимание, что компонентом базы может быть не только фрагмент кода, но, вообще говоря, любой произвольный текст. Хотя здесь видно цветовое выделение ключевых слов, на самом деле в базе просто сохраняется соответствующее форматирование, выполненное в источнике информации (в данном случае это выделение цветом было сделано в VBA-редакторе).
Рис. 11 Description - здесь задается тип фрагмента кода - Function, Module, Class Module или Code Snippet - и вводится его краткое описание (эти параметры видны на рис. 10). Setting - на этой вкладке задаются две группы параметров (категории и ключевые слова), которые обеспечивают поиск нужного фрагмента. В правой части имеется окно со списком Categories, которые привязывают текстовый компонент к иерархическому оглавлению (рис. 12). Нужно обратить внимание, что в отличие от привычной нам адресации файлов, отдельный компонент базы данных может принадлежать сразу нескольким категориями (узлам оглавления). Здесь можно использовать не только существующие категории, но и создавать новые.
Рис. 12 В левой части находится список ключевых слов данного текстового компонента (рис. 13). Эти слова выбираются из набора ключевых слов базы данных, который можно здесь же пополнять. (К сожалению, непонятно, как можно удалить неиспользуемые ключевые слова.)
Рис. 13 Вернемся обратно в начальное окно утилиты (рис. 10). Теперь понятно, что три вкладки левого под окна обеспечивают разные варианты поиска нужного фрагмента кода: Contents - по категориям (оглавлению), Keywords - по ключевым словам, Search - полнотекстовый поиск по различным критериям (устанавливая флажки флажки Search titles only или Search through code, а также используя логические операции AND, OR или NOT). Программист может корректировать содержимое (удалять, добавлять фрагменты) наборов кода или создать новые базы данных. Кроме того, он может выбирать функции, менять их имена и описание, задавать их атрибуты. Примечание. При добавлении нового кода в базу данных Code Librarian следует использовать ключевые слова и описания, которые будут понятны другим разработчикам, осуществляющим поиск кода в этой базе данных. Нужный фрагмент кода можно легко вставить его в свой модуль проекта. Для этого установите курсор в то место модуля вашего проекта, куда хотите поместить найденный фрагмент, а затем перейдите в окно Code Librarian, выделите там необходимый текст и щелкните кнопку Insert Code to Module на панели инструментов. Можно также перетащить мышью выделенный фрагмент кода в модуль проекта или скопировать его туда с помощью буфера обмена. Поставляемая база данных CodeLib.mdb содержит довольно много полезных фрагментов программных кодов. Но возможно, еще полезнее будет использовать утилиту Code Librarian для создания собственного архива повторно используемого кода. Создайте собственную базу данных и заносите в нее то, что может пригодится в будущем. Это могут быть и законченные утилиты и просто какие-то небольшие программные конструкции. Ведь, наверняка, почти все программисты периодически сталкиваются с ситуацией - "помню, что уже делал такую конструкции и решал какие-то проблемы с ее отладкой, но не помню - когда и где..." А если вы решите писать книгу по программированию, то было бы целесообразно распространять ее вместе со своей библиотекой кода, причем такой упорядоченный набор примеров можно формировать по ходу дела. В заключении отметим, что утилита Code Librarian заметно выиграла бы, если в ней были реализованы некоторые полезные дополнительные режима, например поддержка перекрестных ссылок между отдельными ее компонентами. VBA Source Code ControlИспользование VBA Source Code Control выгодно не только в группах разработчиков - отдельные программисты тоже могут выиграть, применяя контроль версий проекта. Так, если вы произвели какие-либо изменения, а затем захотели вернуться к предыдущей версии, то с помощью Visual SourceSafe можно легко восстановить предыдущий исходный код. При работе же в группах, когда много людей совместно создают, поддерживают и обновляют файлы для крупного приложения, координация их работы может представлять большую сложность. Использование Visual SourceSafe позволяет осуществлять надежное и простое управление исходным кодом, синхронизируя работу разработчиков в группе согласно сделанным ими изменениям. Дополнение VBA Source Control позволяет подключить автономный пакет Visual SourceSafe (система контроля версий) в среду VBA, благодаря чему разработчики получают следующие возможности управления проектами:
Обратите внимание, что в Microsoft Office 2000 существует два типа дополнений VBA Source Code Control:
Дополнение VBA Source Code Control работает следующим образом. При разработке крупного приложения все VBA-объекты, создаваемые группой программистов, хранятся в проекте Visual SourceSafe. При этом каждый разработчик работает над VBA-проектом на своей машине. Восстановление исходного кода объектов из пакета Visual SourceSafe означает, что этот код копируется из проекта Visual SourceSafe в проект разработчика на локальной машине. Сохранение исходного кода объекта происходит путем копирования его с локальной машины разработчика в базу данных Visual SourceSafe. После установки дополнения VBA Source Code Control и подключения системы контроля версий Visual SourceSafe с помощью команды Add-Ins/VBA Source Code Control/Add Project to SourceSafe в подменю Add-Ins/VBA Source Code Control появляются такие команды (рис. 14):
Рис. 14
WinAPI ViewerПри работе с внешними функциями DLL-библиотек их описание с помощью оператора Declare должно быть включено в состав каждого программного компонента проекта (форма, модуль и пр.), где они используются. Однако при этом нужно быть особенно внимательным - ошибка может повлечь неприятности в виде, например, зависания программы. Кроме того, многие такие функции используют в качестве параметров специальные структуры данных Type, а для управления режимами выполнения функций - определенные значения параметров. Здесь нужно обратить внимание на следующую особенность современного стиля документации и литературы по VB: если в описании говорится об использовании параметра или типа данных, имя которых обозначено заглавными буквами (например LB_GETITEMHEIGHT), то имеются в виду некоторые стандартные значения констант или структур. Для упрощения работы с наиболее часто используемыми внешними функциями - стандартным набором Windows - в состав ODE 2000 входят два файла, содержащие описания процедур, а также константы и структуры данных: WIN32API.TXT (собственно набор Win32 API) и MAPI32.TXT (дополнительный набор Message API - почтовых функций). Предупреждение. Не следует загружать файл WIN32API.TXT в проект в виде программного модуля. Файл занимает слишком много места в памяти. Обычной практикой является копирование нужных описаний, констант и структур данных в соответствующие программные модули проекта. Далее все происходит достаточно просто - когда вам нужно получить описания, константы и типы данных для работы с API, выберите команду Add-Ins/API Viewer, после чего появится окно утилиты (рис. 15). Далее необходимо загрузить нужный файл описаний, например WIN32API.TXT, с помощью команды Load Text File из меню File. Потом, устанавливая в списке API Type нужный вид информации, можно просматривать содержимое файла в списке Available Items. Для быстрого поиска можно использовать кнопку Search.
Рис. 15 Для более быстрой загрузки файла описания можно преобразовать текстовый файл в базу данных Jet, однако при работе с MDB-файлом почему-то пропадает кнопка Search. Для преобразования файла следует выполнить такие действия:
Примечание. К сожалению, выполнить такое преобразование нам не удалось, поскольку команда Convert Text to Database на наших компьютерах оказалась почему-то недоступной. Добавление описаний из исходного файла в проект VB выполняется следующим образом. В списке Available Items выделяется нужный элемент, а потом с помощью кнопки Add его содержимое переносится в окно Selected Items. Чтобы удалить информацию из окна Selected Items, надо установить на нее курсор и нажать кнопку Remove. Скопировать содержимое окна Selected Items в проект VB можно двумя способами:
ВНИМАНИЕ! ВСТРЕЧАЮТСЯ ОШИБКИ! К сожалению, в файле описаний встречаются ошибки. В частности, в WIN32API.TXT приведено такое описание функции GetCurrentDirectory: Declare Function GetCurrentDirectory Lib "kernel32" _ Alias "GetCurrentDirectory"... Здесь видно, что имя функции и ее альтернативное название совпадают. Соответственно при копировании этой строки в программный код редактор VB совершенно логично автоматически убирает команду Alias. При запуске программы на выполнение выдается сообщение об отсутствии функции в DLL-библиотеке. Ошибка очевидна - в конце названия функции после команды Alias пропала буква "A": ... Alias "GetCurrentDirectoryA"... Имейте это в виду, если вам встретится аналогичная ошибка в других описаниях. |