Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Orlov_VBA

.pdf
Скачиваний:
23
Добавлен:
13.03.2016
Размер:
7.79 Mб
Скачать

Рис. 7.1. Список макросов, которым можно назначить кнопки.

Название проекта можно задать с помощью команды "Свойства" (в англоязычных версиях - Project Properties) контекстного меню этого названия (рис.7.2), а также через Окно свойств (рис.7.3), предварительно выделив прежнее название проекта.

Рис. 7.2. Изменение имени проекта через пункт меню "Свойства проекта".

Рис. 7.3. Изменение имени проекта через Окно свойств.

По умолчанию каждому новому проекту дается название TemplateProject (если этот проект содержится в шаблоне) или просто Project (если этот проект содержится в документе Word). Проект, содержащийся в шаблоне Normal.dot, по умолчанию так и называется - Normal.

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

Имя проекта может содержать как русские, так и английские символы, но не должно иметь пробелов - при попытке задания проекту имени с пробелами будет выдано предупреждение (рис. 7.4).

Рис. 7.4. Пробелы в имени проекта недопустимы - иначе будет ошибка.

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

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

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

Впрочем, всплывающие подсказки кнопок можно задать самостоятельно с помощью команды

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

Вам может не понравиться весьма ограниченный выбор значков для кнопок, предлагаемый Word'ом. Этот набор, вызываемый из меню "Выбрать значок для кнопки" в режиме настройки панелей, действительно, маловат. Но никто не мешает с помощью других команд того же меню скопировать значок с любой другой кнопки на любой другой панели или создать его самому во встроенном редакторе изображений на кнопках (рис.7.5).

Рис. 7.5. Редактор кнопок. Не забывайте про него!

Кроме того, красивые значки можно извлечь из "недр" Office, - а он содержит в себе около двух тысяч разнообразных значков. Для этого достаточно ввести в Окне отладки команды

Set dd = ActiveDocument.CommandBars.Add("Panel") CommandBars("Panel").Controls.Add(Type:=msoControlButton,

ID:=797).FaceId = x

где x - любое число от 1 до 3000. Тогда на указанной в команде панели - с именем "Panel" - будет создана кнопка со значком, который можно скопировать на свою кнопку. Не для всех кодов существуют значки, поэтому иногда созданная таким образом кнопка будет пустой, - попробуйте еще раз с другим х11. Параметр Id, упоминаемый в команде, задает то действие, которое должно быть выполнено при нажатии на создаваемую кнопку, в данном случае - открытие диалогового окна "Настройка".

Весьма желательно для программного добавления своих кнопок использовать создаваемые отдельно панели инструментов, так как работать со стандартными, исходно входящими в состав Word'а панелями иногда не удается, в частности, из-за того, что в локализованных версиях Microsoft Office, в том числе и в русской, отображаемые и истинные их имена не совпадают12.

Более подробно о том, как создавать и удалять кнопки на панелях инструментов, какими эти кнопки могут быть, вы можете почитать в Справочной системе VBA (например, начав с контекстной справки по слову CommandBars). В Справочной системе эта информация изложена весьма подробно и снабжена множеством примеров. Однако для простого назначения кнопок программам на VBA хватит и вышеизложенной информации.

Довольно много полезных приемов работы с панелями инструментов, кнопками на них - создание, копирование, удаление - реализованы в наборе макросов "SaveIn" (есть на прилагаемом к книге компакт-диске, а также доступен через Сеть с адреса http://antorlov.chat.ru/savein.htm).

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

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

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

При помещении программы в Интернет весь набор ее файлов следует заархивировать в формате Zip (наилучший вариант) или Rar. При желании архив с программой можно сделать самораскрывающимся -

11Существует программа "Генератор иконок", специально предназначенная для извлечения иконок из недр Word'а. О ней рассказано в главе 9.

12Вы можете в этом убедиться, использовав фрагмент кода

For Each J In CommandBars

Debug.Print J.Name

Next J

который выведет в Окно отладки имена всех присутствующих в Word и в открытых и загруженных документах и шаблонах панелей инструментов.

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

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

** *

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

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

1.Если панель инструментов сохранена в шаблоне Normal.dot, то она доступна всегда, когда открыт

Word.

2.Если панель инструментов сохранена в шаблоне, который загружен как глобальный - то есть помещен в папку автозагружаемых файлов Word, то она также доступна всегда, когда открыт Word, но

ееможно убрать, выгрузив шаблон с помощью диалогового окна "Сервис - Шаблоны и надстройки" (или удалив шаблон из папки автозагружаемых файлов). Местонахождение папки автозагружаемых файлов можно посмотреть в окне "Сервис - Параметры - Расположение" (рис. 7.6). Для Word97 это обычно папка ..\Microsoft Office\Office\Startup, а для Word2000/XP по умолчанию назначается папка C:\Windows\Application Data\Microsoft\Word\Startup, однако эти пути всегда можно поменять на более удобные.

Рис. 7.6. В этом окне можно посмотреть расположение папки автозагружаемых файлов.

3.Если панель инструментов сохранена в шаблоне, на котором основаны документы, например, в одном из шаблонов, находящихся в папке шаблонов пользователя Word (посмотреть можно там же, для

Word97 по умолчанию назначается папка ..\Microsoft Office\Office\Шаблоны, а для Word2000 - C: \Windows\Application Data\Microsoft\Шаблоны) и ее подпапках, то она доступна тогда, когда этот шаблон присутствует на компьютере и активен документ, созданный на его основе. (Если документ просто открыт в Word, но неактивен, то панель инструментов все равно не видна.)

4.Если панель инструментов сохранена в каком-либо документе, то она доступна тогда, когда активен этот документ.

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

Рис. 7.7. Диалоговое окно "Организатор". С его помощью можно копировать панели инструментов из одного шаблона в другой.

Информация о том, какие панели при предыдущем выходе из Word'а были видимы, а какие нет, как они располагались и где находились на экране (она требуется, чтобы восстановить эти их параметры при новой загрузке Word), сохраняется в системном реестре. Информация же о том, как должны располагаться панели при первой загрузке шаблона, находится в самом шаблоне и используется также при отсутствии нужной информации в реестре.

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

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

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

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

Рис. 7.9. Всплывающая подсказка на кнопке вызова макроса. Обратите внимание на возникшие в ней пробелы.

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

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

Поиск модуля и имени макроса при нажатии кнопки (при этом не имеет значения, где панель сохранена) идет в следующем порядке: "Активный документ" - "Шаблон, на котором основан документ" - "Normal.dot" - "Шаблон, загруженный глобально через папку автозагружаемых файлов Word или окно "Шаблоны и надстройки".

Кнопки с панелей можно свободно перемещать с панели на панель, при этом их связь с макросами сохраняется вне зависимости от того, где макрос находится. Если макрос недоступен (скажем, удален глобальный шаблон с ним), то кнопка просто не работает.

** *

Акак в Excel?

ВMicrosoft Excel макросы могут храниться в книгах Excel, содержась как в отдельных модулях, так

ив программной части листов книг и книги в целом.

Для вызова макроса можно использовать сочетание клавиш, пункт меню или кнопку на панели инструментов.

Создать панель инструментов можно в диалоговом окне "Сервис - Настройка - Панели инструментов". Для создания кнопки на панели инструментов, вызывающей макрос, следует открыть окно "Сервис - Настройка - Команды - Макросы" (рис.7.10), и, перетащив иконку "Настраиваемая кнопка" на какую-либо панель инструментов, выбрать из ее контекстного меню пункт "Назначить макрос" (рис.7.11), а в появившемся окне (рис.7.12) выбрать тот макрос, который следует кнопке назначить.

Рис. 7.10. Excel XP. Окно средств настройки интерфейса

Рис. 7.11. Нажмите здесь, чтобы назначить кнопке макрос...

Рис. 7.12. ...и этот макрос выберите...

Рис. 7.13. А так можно назначить макросу пункт меню.

Панели инструментов могут храниться как в книгах, так и в файле настроек Excel с расширением

.xlb. В зависимости от версии Microsoft Office этот файл находится либо в системном каталоге, либо в специальной папке в разделе пользовательских настроек (например, в Windows2000 это папка

D:\Documents and Settings\Администратор\Application Data\Microsoft\Excel), имя же этого файла соответствует имени пользователя Windows в сочетании с версией Excel'а.

Создать панель инструментов можно только в файле настроек Excel - с помощью диалогового окна "Сервис - Настройка - Панели инструментов". Однако если необходимо, чтобы панель инструментов хранилась в книге Excel, ее следует туда скопировать с помощью диалогового окна "Вложить" (открывается при нажатии кнопки "Вложить" в диалоговом окне "Сервис - Настройка - Панели инструментов"), см.рис. 7.14.

Рис. 7.14. Окно копирования панелей инструментов в книги.

При работе с панелями инструментов в Excel имеет быть следующее.

1.Скопированная в книгу панель инструментов изменяться не может. Все изменения, вносимые в отображаемую на экране панель инструментов, делаются в той панели, которая хранится в файле настроек Excel. Чтобы эти изменения были перенесены в панель инструментов, находящуюся в книге, необходимо ее заново туда скопировать с помощью диалогового окна "Сервис - Настройка - Панели инструментов - Вложить", предварительно удалив старые.

2.Если в файле настроек Excel есть панели инструментов, одноименные сохраненным в книге, то даже при открытии этой книги отображаются именно они, а не те, что сохранены в книге. Две одноименные панели инструментов в Excel существовать не могут.

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

Иными словами, если вы напишете макрос, сохраните его в книге Excel, а затем создадите панель инструментов и назначите ее кнопке этот самый макрос, то для того, чтобы вы смогли передать другому

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

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

Если вы переместили в другую папку файл с макросами, вызываемыми кнопками на скопированной

вфайл настроек Excel панели инструментов, то просто удалите эту панель из файла настроек Excel с помощью диалогового окна "Сервис - Настройка - Панели инструментов", а затем откройте и закройте

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

Информация о назначенном макросу пункте меню хранится в файле настроек Excel и не копируется

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

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

Если же программа, работающая в среде Excel и содержащаяся в создаваемой Excel'ем книге, должна выполнять расчеты над данными в других книгах, то наиболее предпочтительно создать для нее инсталлятор, автоматически копирующий файл с программой в какую-либо папку, где он будет впоследствии находиться постоянно. Если в такую книгу поместить панель инструментов, содержащую кнопку вызова макроса, то при открытии этой книги данная панель автоматически скопируется в файл настроек Excel и будет затем постоянно доступна для пользователя, позволяя ему запускать макросы из книги.

ВExcel можно также создавать особые формы файлов, содержащих программный код - надстройки. Но рассказ о них выходит за рамки нашей книги.

** *

Цифровая подпись

С появлением в составе Microsoft Office языка макрокоманд, позволяющего, помимо операций с данными пользователя, еще и работать с файловой системой и самими макрокомандами, по миру стали распространятся макровирусы. В связи с этим во всех версиях Office, начиная с Microsoft Office 97, при открытии документа, содержащего макросы, пользователю выдается предупреждение о наличии их в документе. Выбор, предоставляемый окном предупреждения, невелик, - либо "отключить макросы", полностью запретив их использование, либо их включить и подвергнуться риску вирусного заражения. Впрочем, в последнем случае можно избежать автозапускающихся макросов, если удерживать клавишу Shift при нажатии на кнопку "Не отключать макросы" предупреждающего диалога, но вирусные компоненты могут и подменять команды Office, так что использование Shift'а полной защиты не дает.

Однако при постоянной работе с файлами, содержащими программы на Visual Basic for Applications, постоянно появляющееся диалоговое окно с предупреждением изрядно надоедает. Возникает желание, чтобы документы, созданные каким-то одним человеком (или группой лиц), открывались без запроса о запуске в них макросов, а при открытии всех остальных диалоговое окно по-прежнему отображалось. И как раз вот для таких случаев и был создан механизм цифровой подписи.

Цифровая подпись - это небольшой набор данных (около килобайта), который можно прикрепить к проекту на Visual Basic for Applications для того, чтобы пользователи этого проекта могли запускать

13 Стоит признать, что в Excel концепция панелей инструментов значительно хуже продумана, чем в Word. Этим и обьясняются такие сложности при работе с ними.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]