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

Orlov_VBA

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

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

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

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

После того, как вы завершили работу над своей программой на Visual Basic for Applications и оформили ее в виде отдельного проекта (для Word - шаблона или документа, для Excel - книги и т.д.), вы можете добавить к нему цифровую подпись. Чтобы это сделать, необходимо в каталоге, куда установлен Office, запустить файл Selfsert.exe (рис.7.15).

Рис.7.15. Вот этот файл генерирует электронную подпись.

(Этот файл копируется на компьютер только в том случае, если при установке Microsoft Office был выбран также и пункт "Цифровая подпись для проектов VBA". Если этого сделано не было, то для использования программы Selfsert, возможно, потребуется снова запустить программу установки Microsoft Office в режиме добавления и удаления компонентов пакета.)

Программа пригласит ввести имя (рис. 7.16). Именно это имя потом будет отображаться при установке проекта с цифровой подписью на компьютер другого пользователя.

Рис.7.16. Генерация цифровой подписи.

По окончании работы программы появится сообщение об успешном создании сертификата - файла, содержащего цифровую подпись. Физически этот файл помещается в папку Certificates, которая является одним из подкаталогов папки с настройками пользователя и называется длинной последовательностью символов (рис. 7.17).

Рис.7.17. Файлы сертификатов.

Сразу с момента создания новый сертификат с цифровой подписью можно использовать. Например, чтобы подписать им новый проект на Visual Basic for Applications, необходимо выделить какой-либо компонент подписываемого проекта (например, его название), а затем выбрать из пункта меню "Tools" Редактора VBA пункт "Digital Signature" (рис. 7.18) и в появившемся диалоговом окне "Цифровая подпись" для выбора сертификата следует нажать одноименную кнопку.

Рис.7.18. Прикрепление электронной подписи.

В открывшемся диалоговом окне (рис.7.19) можно выбрать прикрепляемый сертификат. Вы можете создать множество сертификатов с разными именами, и тогда в данном окне выбор будет больше, чем на рисунке.

Рис.7.19. Выбор сертификата для прикрепления.

О том, какой сертификат прикреплен к тому или иному файлу (и прикреплен ли вообще), вы можете узнать в диалоговом окне "Цифровая подпись", вызываемом пунктом меню "Tools - Digital Signature", - том же самом, что используется для прикрепления сертификата (рис.7.18).

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

*

Когда пользователь откроет файл, подписанный сертификатом, ему будет выдано сообщение об этом

(рис. 7.20).

Рис.7.20. Запрос при открытии файла с макросами и сертификатом.

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

Посмотреть список цифровых подписей, файлы с которыми признаны достойными открытия без запросов, можно в диалоговом окне "Сервис - Макросы - Безопасность", на его вкладке "Надежные источники" (рис. 7.21). Все установленные сертификаты (т.е. те, в при открытии документов с которыми был отмечен пункт "Всегда доверять макросам из этого источника"), будут там перечислены. При необходимости можно удалить ненужные.

Рис.7.21. Список установленных сертификатов.

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

Цифровую подпись нельзя применять для аутентификации проектов на Visual Basic for Applications по имени или еще каким-либо данным ее создателя, то есть для стопроцентного уверения пользователя, что автор макросов в открываемом им файле именно тот, чье имя высвечивается в диалоговом окне подтверждения разрешения на использование макросов, - в программу Selfsert можно ввести любое имя, в том числе и используемое каким-либо другим автором VBA-программ, и доказать, что новый сертификат был создан не реальным владельцем этого имени, будет нельзя. Для того, чтобы это сделать все-таки было можно, необходимо получить сертификат в компании VeriSign, которая как раз и занимается созданием сертификатов, уникальных для каждого ее клиента, или другой ей подобной (адреса приводятся в Справочной системе Microsoft Office в разделе "Цифровые подписи"). Кроме того, не поддающиеся подделке сертификаты можно создавать с помощью программы Microsoft Certificate Server).

Иногда при открытии файла с макросами, имеющего сертификат с цифровой подписью, окошко "Всегда доверять макросам из этого источника" оказывается недоступным. В этом случае пользователю придется провести процедуру ручной установки сертификата.

Для установки сертификата в диалоговом окне запроса о необходимости разрешения использования макросов следует нажать кнопку "Настройка" (см. рис. 7.20), а в открывшемся окне (рис. 7.22) - кнопку "Просмотр сертификата".

Рис.7.22. Ручная установка сертификата. Очередной шаг.

В окне информации о сертификате, которое откроется после нажатия этой кнопки, следует нажать следующую кнопку - "Установить сертификат". Запустится мастер импорта сертификатов (рис. 7.23).

Рис.7.23. Мастер импорта сертификатов.

Для прохождения мастера достаточно во всех его диалоговых окнах нажимать кнопку "Далее..." или "Готово". Появление сообщения с запросом (рис. 7.24) является окончанием процесса.

Рис.7.24. Ручная установка сертификата. Последний запрос.

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

*

Цифровую подпись можно использовать и для гарантии неизменности документа без запрета на его редактирование. После присоединения цифровой подписи к документу при любом его изменении она будет уничтожена. На основании наличия или отсутствия цифровой подписи можно сделать вывод о том, производилось ли редактирование документа в промежутке между ее прикреплением к документу и текущим просмотром.

Для добавления электронной подписи, например, к файлу Word следует открыть вкладку "Безопасность" диалогового окна "Сервис - Параметры" и нажать кнопку "Цифровые подписи". Добавление цифровой подписи к документу осуществляется (как это ни странно!) кнопкой "Добавить" в открывающемся по нажатию предыдущей кнопки окне (рис. 7.25).

Рис.7.25. Подписывание файла Word.

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

Полезные советы

* * *

В этой главе вы найдете набор советов по программированию на VBA, которые могут помочь вам в решении тех или иных задач. Кроме того, в конце главы есть несколько заметок на различные темы, связанные с программированием на Visual Basic for Applications.

** *

Настройки программы можно сохранять в системном реестре Windows. Для этого служит команда "SaveSetting", с помощью которой можно поместить в системный реестр строку или число. Она имеет формат "SaveSetting "Имя приложения","Имя раздела", "Ключ", "Значение"". Имя приложения,

имя раздела и ключ - указатели места, в котором сохраняется Значение. Получить значения из реестра можно командой "GetSetting" с синтаксисом "GetSetting "Имя приложения","Имя раздела",

"Ключ", "То значение, которое следует вернуть, если такого ключа, как указанный в предыдущем параметре, в реестре нет"", а удалить - командой "DeleteSetting "Имя приложения","Имя раздела", "Ключ"". Например:

SaveSetting "Макросы", "Макрос1", "Имя папки", "C:\MyPapka" papka = GetSetting "Макросы", "Макрос1", "Имя папки", "C:\Docs"

** *

Записать список всех установленных в системе шрифтов в массив можно таким способом:

ReDim shrifti(FontNames.Count) As String For r = 1 To FontNames.Count

shrifti(r) = FontNames(r) Next r

WordBasic.SortArray shrifti()

(В массив "shrifti()" размером в количество шрифтов в системе помещается список имен всех установленных в системе шрифтов. Команда "WordBasic.SortArray" сортирует его по алфавиту.)

** *

Условие "If Selection.Type = wdSelectionIP Then …" выполнится, только если в документе не выделен фрагмент текста.

** *

Если вы решили хранить какую-нибудь информацию, нужную при работе программы, в отдельном файле, не стоит экспериментировать с командами чтения и открытия файла типа "open", "write" и др. Просто открывайте файл в Word как текстовый с помощью команды "Documents.Open …" и пишите в него обычными средствами записи текста: "Selection.Text = "Мой текст"".

** *

Посмотрите повнимательнее свойства, объекты и методы таких объектов, как "Application" и "System" (для этого достаточно набрать название объекта и поставить после него точку, - список возможных продолжений отобразится сам - рис.8.1). Среди них можно найти немало весьма интересных и полезных, вроде средства задания и получения значений ширины и высоты окна Word, информации о языке данной версии Office, метод чтения данных из произвольного места реестра и многое другое.

Рис. 8.1. Свойства и методы обьекта System - склад весьма интересных

вещей....

Вот некоторые полезные свойства обьекта Application.

Application.CapsLock - показывает, горит ли на клавиатуре индикатор CapsLock. Application.NumLock - показывает, горит ли на клавиатуре индикатор NumLock. Application.Caption - сообщает заголовок окон запущенной программы (для Word, например, это -

"Microsoft Word"). Этот заголовок можно поменять: так, команда "Application.Caption = "Мой Word""

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

свойства можно и убрать ее, и снова восстановить - командами Application.DisplayStatusBar=False и Application.DisplayStatusBar=True соответственно.

Application.EnableCancelKey - в случае установки в True запущенный макрос нельзя будет прервать нажатием Ctrl+Break.

Application.Height и Application.Widht - возвращают соответственно высоту и ширину окна приложения. С помощью этих свойств можно и задать размеры окна приложения, скажем, расширить окно Word до нужной ширины.

Application.PathSeparator - возвращает символ, служащий разделителем имен папок в полном пути к файлу. В MS-DOS и Windows это "\", а в операционных системах, применяемых на компьютерах Macintosh - ":". Использование данного свойства может пригодиться при разработке мультиплатформенных программ - работающих как в Microsoft Office for Windows, так и в Microsoft Office for Macintosh.

Application.Version - сообщает версию приложения. Например, такая команда, будучи вызванной в

Microsoft Word 97, вернет "8.0" или "8.0а", в Microsoft Word 2000 - "9.0", в Microsoft Word XP - "10.0".

А вот некоторые интересные методы этого обьекта:

a=Application.CleanString (строковая переменная) - очищает строку, находящуюся в строковой переменной, от неотображаемых специальных символов;

Application.OnTime - позволяет запустить тот или иной макрос в назначенное время или спустя некоторый срок после выполнения данной команды. О параметрах использования рассказано в Справочной системе VBA, там же приведены и примеры.

* * *

С помощью фрагмента кода

Set MyData = New DataObject

MyData.SetText "Мой текст"

MyData.PutInClipboard

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

* * *

С помощью команды "Options.DefaultFilePath("константа названия папки")" можно получить пути и имена папок, перечисленных в диалоговом окне Word "Сервис - Параметры - Расположение". Все константы перечислены в справке VBA по слову "DefaultFilePath" (рис.8.2), а об их значении можно легко догадаться, переведя название константы с английского языка.

Рис. 8.2. Пути и папки. Справка.

** *

Если у одного из элементов формы установить свойство Cancel в True, то нажатие кнопки Esc будет эквивалентно клику мыши на этом элементе.

** *

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

AddIns.Add("полное имя шаблона, включая путь к нему и расширение").Installed = True

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

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