О панелях, шаблонах и макросах

Панель инструментов Word 97, 2000, т. е. ее название, набор расположенных на ней кнопок, связь этих кнопок с командами и макросами, — все это может храниться либо в шаблоне Microsoft Word 97, 2000 (*.dot), либо в документе Word (*.doc). При этом выполняется одно из следующих условий:

  • если панель инструментов сохранена в Normal.dot, то она доступна всегда, когда открыт редактор;
  • если панель инструментов сохранена в загруженном шаблоне, т. е. том, который помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, однако ее можно убрать, выгрузив шаблон с помощью диалогового окна «Сервис?Шаблоны и настройки». Местонахождение каталога автозагружаемых файлов можно посмотреть в окне «Сервис?Параметры?Расположение». Для Word 97 — это обычно Microsoft OfficeOfficeStartup, а для Word 2000 по умолчанию назначается каталог C:Windows Application DataMicrosoftWordStartup;
  • если панель инструментов сохранена в том шаблоне, на котором основаны документы, например в одном из тех, что находятся в папке шаблонов пользователя Word (для Word 97 по умолчанию назначается каталог Microsoft OfficeOfficeШаблоны, а для Word 2000 — C:WindowsApplication Data MicrosoftШаблоны) и ее подкаталогах, то она доступна тогда, когда этот шаблон есть на жестком диске, а созданный на его основе документ активен;
  • если панель инструментов сохранена в каком-либо документе, то она доступна тогда, когда активен этот документ.

Панели инструментов можно копировать из одного шаблона или документа в другой с помощью диалогового окна «Организатор».

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

Здесь можно посмотреть, где находится папка автозагружаемых файлов

С макросами, которым назначены кнопки на панелях, дело обстоит так. Каждой кнопке ставится в соответствие имя вызываемого ею макроса, которое состоит из названия модуля, содержащего этот макрос, и самого этого макроса, находящегося в модуле. Узнать имена можно в редакторе VBA.

При изменении хотя бы одного компонента имени кнопка становится неработоспособной. Всплывающая подсказка, появляющаяся при наведении курсора мыши на кнопку, совпадает с именем макроса в модуле. Причем тогда, когда это имя составлено из двух-трех слов, начинающихся с прописной буквы (например, UniterDocs), эти слова в подсказке разделяются пробелом.

Диалоговое окно «Организатор» для копирования панели инструментов из одного шаблона в другой

Несмотря на то что в параметрах кнопки указывается, где находится макрос, — в Normal.dot, TemplateProject (в каком-либо шаблоне) или Project (в каком-либо документе) — редактором Word это не учитывается. Так что если в загруженном шаблоне (помещенном в папку автозагружаемых файлов Word) есть макрос с теми же названием и именем, что и в Normal.dot, то при нажатии кнопки вызова макроса (расположенной на любой панели) он выполняется из Normal.dot, а не из автозагружаемого шаблона. Поиск модуля и имени макроса при нажатии кнопки (где панель сохранена — не имеет значения) происходит в следующем порядке: «активный документ?шаблон, открытый как файл?шаблон, на котором основан документ (normal.dot)?автозагружаемый шаблон».

Если при запуске Word в папке «Шаблоны» нет Normal.dot, то последний создается автоматически, со стандартными настройками, заданными по умолчанию, и в него помещается изначальный набор панелей инструментов. Кнопки можно перемещать с панели на панель, причем их связь с макросами сохраняется независимо от того, где макросы находятся. Если же макрос недоступен, например удален вместе с автозагружаемым шаблоном, то кнопка не работает.

Последние штрихи

Когда программа написана и отлажена, необходимо придать ей «товарный вид», убрав лишние команды и модули, а также создать способ ее вызова — кнопку или пункт меню, а возможно, даже сформировать для кнопок панель инструментов. Без этого даже с очень хорошо написанной программой сможет работать лишь ее создатель, да и то не всегда. К тому же красивое оформление всегда радует глаз.

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

Выделено название макроса DocsMerger в модуле UniterDocs

Далее надо решить, в каком формате оформить программу — как шаблон Word, как автозагружаемый шаблон или как простой документ? Если программа используется для одномоментных или редко проводящихся расчетов и не работает с текстом документа, то ее проще всего поместить в документ Word. В случае необходимости файл можно открыть и выполнить программу. Если же она предназначена для работы с текстом особого, формируемого отдельно от других документа (например, для изготовления красивых поздравительных открыток), то ее лучше организовать как шаблон и создавать на его основе документы, которые потом будут заполняться содержанием. Когда же программа проводит какие-нибудь серьезные операции с текстом, находится постоянно в работе или взаимодействует одновременно со многими документами, то ей прямая дорога в папку автозагружаемых файлов Word.

Всплывающая подсказка на кнопке вызова макроса

После этого нужно сделать документ с программой. Создается пустой документ требуемого формата, а затем с помощью диалогового окна «Организатор» («Сервис?Макрос?Макросы?Организатор» или «Сервис?Шаблоны и настройки?Организатор») в него копируются все готовые компоненты программы из шаблона или того документа, где проводилась разработка. Этот новый документ сохраняется под каким-нибудь запоминающимся именем.

И наконец, задается способ вызова программы. С помощью диалогового окна «Сервис?Настройка?Команды?Макросы» можно простым перетаскиванием назначить макросу пункт меню или кнопку на стандартной панели, а также комбинацию клавиш для его вызова. А можно, и это будет лучшим вариантом, организовать новую панель инструментов и туда поместить кнопки для вызова макросов. Следует сохранять все изменения именно в документе с макросами, а не в Normal.dot или где-нибудь еще.

В диалоговом окне «Сервис?Настройка?Команды?Макросы» название каждого макроса отображается так: сначала идет имя проекта (его можно посмотреть и изменить в «Окне свойств» редактора VBA, выделив мышью название нужного проекта), затем — название его модуля (его можно также изменять в «Окне свойств», выделив мышью название модуля), а следом — собственно имя макроса (оно стоит после команды начала программы Sub).

Назначить кнопку или сочетание клавиш для вызова формы невозможно. Сначала следует вставить в текст модуля программы команду вызова формы («ИмяФормы?Show»), при необходимости специально создав программу с одной такой командой, а уже затем назначить ей кнопку или сочетание клавиш.

Для запуска программы удобно использовать кнопки со значками. Для этого из окна «Настройка» придется всего лишь перетащить на какую-нибудь панель инструментов (а лучше на специально созданную) название нужного макроса, а затем выбрать значок для кнопки и задать стиль отображения, причем лучше без текста, как «Основной стиль».

Конечно, можно также оставить на кнопке текст с названием макроса, однако тогда это имя стоит соответствующим образом отредактировать. Помните, что когда курсор мыши подводится к кнопке, вызывающей макрос, то отображается всплывающая подсказка с его названием. Поскольку берется наименование после команды начала программы Sub, макросам следует давать осмысленные имена. Однако если макрос назван по-русски, то в нелокализованных версиях Word он не будет вызываться кнопкой, созданной в русской версии.

С помощью команды CommandBars(«Имя панели»).Controls(«Номер иконки на панели»).TooltipText = «Текст подсказки» можно самостоятельно задать всплывающие подсказки для кнопок. К сожалению, в диалоговом окне настройки панелей и кнопок сделать это не удастся, поэтому для ввода такой команды придется использовать отдельный модуль или «Окно отладки».

Предлагаемый редактором Word выбор значков для кнопок весьма ограничен, но ничто не мешает с помощью других команд того же меню скопировать значок с иной кнопки сторонней панели или самостоятельно создать его во встроенном редакторе. Кроме того, около двух тысяч красивых разнообразных значков хранятся в «недрах» Word, откуда их можно извлечь. Для этого достаточно лишь ввести в «Окне отладки» команду (в одну строку):

CommandBars(«Имя существующей панели инструментов»).Controls.Add(Type:=msoControlButton, ID:=797).FaceId = x,

где х — любое число от 1 до 3000. На панели, указанной в команде, появится кнопка со значком, который можно скопировать на свою кнопку. Однако не при всех числах существуют значки, поэтому иногда полученная таким образом кнопка бывает пустой. (Существует специальная программа «Генератор иконок», предназначенная для извлечения значков из «недр» редактора Word, — переписать ее можно с сайта http://antorlov.chat.ru.)

Если для вызова макроса выбрана панель инструментов с кнопками, то по окончании работы стоит повторить создание нового документа и снова скопировать в него вместе с панелью все компоненты программы. Такое преобразование существенно сократит размер файла с программой — при редактировании макросов файл с программой сильно увеличивается в объеме (до полутора—двух раз).

Не стоит забывать и об информативном руководстве пользователя, особенно если продукт будет распространяться через Internet. Имеет смысл оформить его как отдельный текстовый файл.

Антон Александрович Орлов, antorlov@inbox.ru, http://antorlov.chat.ru

Продолжение в следующем номере.