Как осваивать программирование в среде MS Office/VBA 2000

Андрей Колесов

Особенности работы со справочной системой MS Office/VBA 2000

Работа со справочной системой MS Office/VBA 97

Изменение команд Word

 

Вначале приведу отрывок из письма, присланного одним из читателей:

«…Я немного программирую в VBA и столкнулся с таким вопросом... Где можно узнать описание встроенных функций (макросов) VBA в MS Word и MS Excel? Названия, в принципе, есть (по крайней мере, в Word), но вот передаваемые и возвращаемые ими параметры неизвестны. Хотелось бы, конечно, получить также список готовых макрокоманд с описанием и параметрами. Зачем огород городить для диалога с сохранением файла, когда есть стандартный диалог FileSaveAs — вот только как передать ему путь и начальное имя? А ведь таких встроенных функций в офисных пакетах имеется огромное множество…»

Действительно, это очень серьезная проблема: программисты просто не знают о существовании многих функций или не могут найти их толкового описания. На то есть и объективные, и субъективные причины. Объективные: огромный объем информации, доступно изложить которую очень непросто. Субъективные: крайне запутанная и не очень полная документация Microsoft, а также то, что офисные продукты Microsoft еще весьма далеки от действительно унифицированного семейства программ. В результате, например, методики работы и изучения Word/VBA и Excel/VBA довольно серьезно различаются.

Но все же информацию о программных ресурсах офисных пакетов найти можно.

Кроме документации, прилагаемой к продукту, Microsoft выпускает отдельными книгами множество разных пособий, руководств и справочников. Так, имеется книга MS Word Visual Basic Reference (есть руководства и по другим офисным продуктам). Другое дело, что стоят такие книги по 40-50 долл. и не пользуются популярностью в России (тем не менее заказать их можно). Но это уже проблемы пользователей: хочешь сэкономить время на изучении вопросов программирования — плати деньги.

Вся информация о VBA имеется в электронной Справке (Help). Однако справочная система Microsoft Office сделана довольно слабо: найти там необходимые сведения очень непросто, схема подключения разных разделов ведет себя непредсказуемым образом, а поиск по Index и Answer Wizard работает, мягко говоря, не очень здорово.

Но все же, зная некоторые особенности работы Help, там можно найти много интересного. Здесь нужно обратить внимание на то, что, хотя справочная система MS Office 2000 содержит больше информации, работать со Справкой в Office 97 гораздо удобнее и проще.

Особенности работы со справочной системой MS Office/VBA 2000

Давайте посмотрим, как можно работать со справочной системой, на примере упомянутой читателем функции FileSaveAs в среде Word. Отметим, что, скорее всего, он имел в виду метод SaveAs, который записывает активный документ на диск в соответствии с разнообразными параметрами этой операции (то есть те действия, что выполняются после нажатия OK в диалоговом окне Save As).

Обратите внимание, что разработчику в данном случае доступны три варианта обращения к справочной системе:

  1. Команда Help|Word Help в среде Word.
  2. Команда Help|Visual Basic Help в среде VBA.
  3. Автономное обращение к MSDN Library Office 2000 Developer.

1. Word Help. Справочная система среды Word посвящена в основном работе с функциями собственно текстового процессора. Но в ней имеется огромный раздел, посвященный вопросам программирования, – Programming Information, который включает шесть подразделов (рис. 1):

  • Getting Started with Microsoft Word Visual Basic;
  • Microsoft Word Visual Basic Reference (здесь содержится описание программной модели собственно MS Word, в том числе в главе Methods – интересующего нас метода SaveAs);
  • Visual Basic Conceptual Topics;
  • Visual Basic Language Reference (справочник по языку VBA, безотносительно к конкретному офисному приложению);
  • Microsoft Office Visual Basic Reference (описание программных компонентов, общих для всего семейства);
  • Microsoft Forms Visual Basic Reference (описание работы с MS Forms).

Такой набор справочной информации для VBA-разработчиков имеется в каждом офисном продукте с соответствующими сведениями об особенностях конкретной программы, хотя иногда эти разделы помещены в корневой каталог под другими названиями (например, Getting Around in ProntPage, Microsoft PowerPoint Visual Basic Reference, Customizing Outlook). Более того, некоторые приложения включают разделы, которые могут пригодиться и при работе с другими программами. Например, Excel включает три таких раздела (ActiveX Data Objects, Microsoft Data Access Objects и Jet SQL Reference), а Access – еще Microsoft Office Web Components Visual Basic Reference и Microsoft Jet and Replication Objects.

Так что информации по вопросам программирования довольно много, но...

Во-первых, попытка найти что-то на данную тему (например, метод SaveAs) с помощью индекса, а не по оглавлению ни к чему не приведет — в поисковую функцию эти разделы почему-то не включены.

Во-вторых, такая Справка нужна не в основной среде приложения, а при работе в среде разработчика...

Поэтому перейдем в среду VBA и выберем команду Help.

2. Visual Basic Help. Обратимся к Справке с помощью команды Help. В появившемся окне мы увидим шесть разделов, посвященных общим вопросам использования VBA (рис. 2). Здесь имеются некоторые полезные разделы, которых не было в Справке самого Word: VB User Interface Help, VB How-To Topics и VB Add-In Model.

Разделов о VB для конкретного приложения в окне Contents нет, но если перейти в режим Index, то здесь можно легко найти Справку по нужному нам методу SaveAs из раздела Word Visual Basic Reference (рис. 3).

Попробуем другой вариант обращения к Справке в среде VBA — с помощью контекстного поиска. В каком-нибудь программном модуле введем слово SaveAs, установим на него курсор и нажмем F1. Появится окно Справки с найденным описанием данного метода. Теперь выберем вкладку Contents, и мы увидим, что состав разделов изменился — здесь представлены разделы по VB из Справки Word (рис. 4)! Но в отличие от описанного выше случая (пункт 1) поиск по Index сейчас отлично работает.

Вывод. В зависимости от способа обращения к справочной системе (из среды приложения или VBA) разработчик получает доступ к различным информационным ресурсам Help.

3. MSDN Library входит только в состав версии MS Office 2000 Developer. В этой системе содержится много полезной информации, причем не только по Office, но также по всем продуктам из состава Visual Studio 6.0, а также описания различных наборов SDK, DDK, технические статьи и пр. (рис. 5).

Для Office/VBA-разработчиков особый интерес представляют два больших раздела (они раскрыты на рисунке): Office 2000 Developer Documentation и Microsoft Office Development. Здесь нужно отметить важный момент — хотя второй раздел является «наследством» от Office 97, в нем содержится много полезной информации, которая либо отсутствует в документации по Office 2000 Developer, либо представлена там в сокращенном виде. Короче говоря, работать нужно параллельно с обоими разделами документации, а может быть, даже лучше начать с внимательного изучения второй части — для Office 97.

Раздел Office 2000 Developer Documentation также полностью представлен в виде печатной документации в пакете MS Office 2000 Developer. MS Office 97/Visual Basic Programmer's Guide также входил в свое время в состав продукта MS Office 97 Developer, причем ее русский перевод был выпущен издательством «Русская Редакция» в 1998 году отдельной книгой.

Сразу подчеркнем, что документация в MSDN Library представляет реальный интерес только для уже достаточно опытных разработчиков, которые хотят использовать профессиональные возможности Office/VBA. Тем же, кто только начинает освоение VBA-программирования, я бы в первую очередь посоветовал познакомиться с некоторыми главами MS Office 97/Visual Basic Programmer's Guide (введение: главы 1, 2, 8).

Что касается раздела Visual Basic Documentation, то он также не очень нужен начинающим программистам. Во-первых, следует помнить, что эта документация относится к автономному Visual Basic, поэтому далеко не все функции, описанные в MSDN Library, реально существуют в VBA, а некоторые общие возможности VB & VBA, приведенные здесь, понадобятся вам несколько позднее. Справочной же системы VBA в составе офисных приложений будет вполне достаточно для достаточно серьезного изучения системы.

В начало

В начало

Работа со справочной системой MS Office/VBA 97

В обзоре новшеств MS Office 2000 мы уже отмечали, что качество справочной системы в новой версии заметно снизилось в смысле как полноты представленной информации, так и удобства работы с ней.

Порядок действий здесь такой. В среде Word 97 выберите команду Help|Contents and Index, в появившемся диалоговом окне раскройте раздел Microsoft Word Visual Basic Reference и дважды щелкните строку Visual Basic Reference. После этого сразу появится новое окно Справки, где будут представлены все нужные вам разделы (рис. 6).

Если же вы обратитесь к Справке из среды VBA, то сначала получите окно с полным составом информации по всему Office 97 (рис. 7). Выбрав нужное вам приложение, вы увидите разделы, показанные на рис. 6. Точно такое же окно будет выведено с помощью контекстного обращения к Справке.

В начало

В начало

Изменение команд Word

В отличие от других приложений MS Office 97/2000, программа Word обладает очень удобным механизмом замены своих встроенных команд (к которым пользователь может обращаться через систему меню и панелей инструментов). Это позволяет вместо создания новых меню и команд производить адаптацию уже существующих. Например, в стандартном варианте команда File|Open показывает в окне список документов Word в специальном каталоге My Documents. Вместо этого можно сделать так, чтобы были видны все файлы в текущем каталоге.

Более того, механизм замены встроенных команд легко позволяет программисту увидеть, с помощью какого программного кода выполняется та или иная встроенная команда, и использовать этот код для создания собственных макрокоманд.

Чтобы познакомиться с этими возможностями, запустите Word 97/2000 (механизм замены в обеих версиях работает одинаково, но программная реализация команд может, естественно, различаться) и создайте документ MyDoc.

Чтобы увидеть список встроенных команд Word, откройте окно Macros и выделите в поле Macro In позицию Word Commands (рис. 8). Здесь представлены все команды, доступные через меню, панели инструментов или горячие клавиши. Хорошо видно, что названия команд меню состоят из названия меню и самой команды. Например, команда Save в меню File имеет имя FileSave. (Разумеется, в русской версии Word названия процедур соответствуют английским названиям меню и команд.)

Чтобы заменить встроенную команду Word на свой вариант, нужно создать макрокоманду в документе или шаблоне с таким же именем. В частности, если вы сформируете макрокоманду FileSave, Word будет обращаться именно к ней, когда вы выберете команду Save в меню File. При этом Word предоставляет очень удобный механизм копирования кода встроенной команды в макрокоманду пользователя.

Например, вы хотите заменить встроенную команду FileSave. Для этого выполните следующие действия:

  1. Откройте диалоговое окно Macros (команда Tools|Macro|Macros).
  2. В поле Macros In выделите Word Commands.
  3. В списке Macro Name выделите команду FileSave.
  4. В поле Macros In выделите шаблон или документ, где вы хотите создать новый вариант команды FileSave. В нашем случае выделите документ MyDoc — замена будет выполняться только при работе с ним. Если же вы выберете глобальный шаблон, например Normal.dot, то модифицированная команда FileSave будет использоваться для всех документов.
  5. Щелкните кнопку Create. При этом в выбранном вами документе или шаблоне сразу появится копия кода встроенной команды FileSave, которая в данном случае будет выглядеть таким образом:
Sub FileSave()
'
' FileSave Macro
' Saves the active document or template
'
    ActiveDocument.Save
End Sub

Теперь вы можете добавлять новые команды или убирать уже имеющиеся — в дальнейшем именно эта макрокоманда будет выполняться при вызове команды File|Save. Чтобы убедиться в этом, включите в подпрограмму, например, код для вывода сообщений на экран:

MsgBox "Мы изменили команду FileSave!"

Если вы хотите не менять встроенную команду, а сделать на ее основе свою, то просто измените название процедуры, например на FileSaveMyVariant, а потом модифицируйте код.

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

Обратите внимание, что есть еще один вариант замены встроенной команды Word: если вы создадите модуль кода с названием этой команды (например, FileSave), то управление будет передаваться подпрограмме с именем Main.

КомпьютерПресс 8'2000

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует