Содержание 1 введение 6

Вид материалаРеферат
10.5 Добавление модуля VBA в шаблон
10.6 Какие файлы присоединены к шаблону?
Иерархия шаблонов
10.7 Автоматизация решения типичных задач
Sub OpenFile()
10.7.2 Выделение слов предметного указателя
Dim Message, Title, Default, IndexWord
10.7.3 Выбор принтера
Пуск (Start) Настройка\Принтеры
Сlick для переключателя optColor
End Sub4. Откройте форму, выберите переключатель optLaser
Private Sub cmdCancel_Click()
Подобный материал:
1   ...   12   13   14   15   16   17   18   19   ...   25

10.5 Добавление модуля VBA в шаблон



Добавить модуль VBA в шаблон довольно просто: откройте требуемый шаблон, а не документ, основанный на этом шаблоне, и создайте модуль, выбрав команду Сервис\Мак-рос\Редактор Visual Basic (Tools\Macro\Visual Basic Editor), а затем команду Вставка\Модуль (Insert\Module). Обратите внимание, что в шаблон нельзя добавить формы, однако созданные модули можно использовать для запуска форм.

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

Приведем пример добавления макроса:

1. Скопируйте требуемый шаблон и назовите копию TESTTEMPLATE.DOT.

2. Откройте файл TESTTEMPLATE.DOT.


Примечание. Чтобы добавить модуль в шаблон, требуется открыть файл с расширением DOT. Если вставить модуль в связанный с шаблоном документ, то модуль сохраняется в документе, а не в шаблоне.


3. Выберите команду Сервис\Макрос\Макросы для открытия диалогового окна Макросы (Macros).

4. Нажмите кнопку Создать (Create) для запуска редактора Visual Basic (рис. 10.4.)





Рис. 10.4  Тело нового макроса


5. Введите инструкции в тело нового макроса. При необходимости создайте также другие процедуры.

6. Сохраните модуль в шаблоне, нажав на панели инструментов кнопку Сохранить (Save), либо выбрав команду Файл\Сохранить (File\Save).

По умолчанию все создаваемые макросы записываются в шаблон NORMAL.DOT. Чтобы добавить процедуры в другой шаблон, необходимо предварительно сохранить его в папке MICROSOFT OFFICE\ШАБЛОНЫ.


10.6 Какие файлы присоединены к шаблону?



В Visual Basic в отличие от VBA файлы проекта (с расширением VBP) можно преобразовать в исполняемые файлы. Макросы VBA хранятся в файлах с расширением BAS. Именно они присоединены к шаблонам (или документам), а не к формам или модулям класса.


Иерархия шаблонов


Следует отметить, что на документ могут влиять несколько шаблонов. Шаблон, на котором основан документ, содержит набор одних установок, а глобальный шаблон NORMAL.DOT может содержать другое множество установок (предполагая, что документ не базируете на этом шаблоне). Кроме того, могут быть загружены также и другие глобальные шаблоны. В этом случае может оказаться, что в разных шаблонах совпадают имена модулей и т.п.

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

Таким образом, установки в шаблоне, присоединенном к документу, имеют наиболее высокий приоритет.


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

10.7 Автоматизация решения типичных задач



Рассмотрим прмеры создания макросов, с помощью которых можно решить типичные задачи.

10.7.1 Отображение диалогового окна при запуске



После запуска Word автоматически создает новый документ. Однако в большинстве случаев необходимо возвратиться к редактированию сохраненного документа, а не работать с новым файлом. Чтобы отобразить диалоговое окно Открытие документа (Open) при запуске Word, создайте следующий макрос:


Sub OpenFile()

'

' OpenFile Макрос

'Макрос записан 20.03.2001 Потахов А.П.

'

Dialogs(wdDialogFileOpen).Show

End Sub


Простое, но верное решение. Макрос OpenFile добавляется в шаблон. Чтобы задать выполнение этой процедуры при запуске Word, щелкните правой кнопкой мыши по кнопке Word, расположенной на панели Microsoft Office, для вывода свойств, а затем добавьте строку /m OpenFile в поле Файл.

Параметр /m можно использовать для предотвращения выполнения любого макроса при запуске Word. Это особенно полезно, если имеются подозрения, что обычный шаблон заражен вирусами.

10.7.2 Выделение слов предметного указателя



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

Данная задача несколько сложнее, чем предыдущая, поэтому необходимо определить порядок действий:
  • Ввести слово, которое требуется выделить.
  • Найти все вхождения заданного слова в документе, игнорируя частичные совпадения. Если требуется отыскать именно слово «NT», например, в «Windows NT», то необходимо отсеять все комбинации символов «nt».
  • Выделить все вхождения слова.

Если требуется просто воспользоваться командой Заменить все (Replace All), чтобы заменить все вхождения определенного слова, то макрос не так уж сложен:


Sub IndexColor ()

' IndexColor Макрос

' Макрос записан 20.03.2001 Потахов А.П.

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.Font.ColorIndex = wdRed

With Selection.Find

.Text = "Алекс"

.Replacement.Text = ""

.Forward = True

.Wrap = wdFindContinue

.Format = True

.MatchCase = True

.MatchWholeWord = True

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

End Sub


Данный макрос находит все вхождения слова "Алекс" (но не "алекс" "АЛЕКС" или "Александр") и выделяет их красным цветом. Чтобы выделить в документе другой термин, требуется внести исправления в макрос, заменив слово "Алекс". Таким образом, чтобы не вносить изменения в макрос в каждом случае, следует добавить в процедуру инструкции для ввода данных.

Чтобы ввести данные, можно добавить в модуль форму. Однако для ввода фразы достаточно и стандартного диалогового окна InputBox, которое предназначено для задания строки:


Dim Message, Title, Default, IndexWord

Message = "Какое слово требуется выделить?"

Title = "Ввод термина"

Default = ""

' Вывод сообщения, заголовка и значения по умолчанию.

IndexWord = InputBox(Message, Title, Default)


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

Объединив вышеприведенный макрос и указанный фрагмент, получаем:


Sub IndexColor ()

' IndexColor Макрос

'Макрос записан 20.03.2001 Потахов А.П.

Dim Message, Title, Default, IndexWord

Message = "Какое слово требуется выделить?"

Title = "Ввод термина"

Default = ""

' Вывод сообщения, заголовка и значения по умолчанию.

IndexWord = InputBox(Message, Title, Default)


Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.Font.ColorIndex = wdRed

With Selection.Find 'Поиск заменяемого текста.

.Text = IndexWord

.Replacement.Text = ""

.Forward = True

.Wrap = wdFindContinue 'Данная строка определяет

' замену слова во всем тексте

.Format = True

.MatchCase = True

.MatchWholeWord = True

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

End Sub


При запуске данного макроса выводится приглашение на ввод требуемого термина (рис. 10.5).





Рис. 10.5  Диалоговое окно Ввод термина

10.7.3 Выбор принтера



Приведем еще один простой пример. Создадим макрос, с помощью которого можно выбрать принтер для печати документа, а также добавим форму, содержащую указание не печатать без крайней необходимости на цветном принтере. Предположим, что загружено два драйвера принтера. В данном примере используются черно-белый принтер HEWLETT-PACKARD LaserJet 4 и цветной принтер HEWLETT-PACKARD DeskJet 550C. Если у вас в распоряжении находятся другие принтеры, просто измените информацию, относящуюся к типу принтеров.

Если на компьютере установлен только один драйвер принтера, добавьте еще один, воспользовавшись командой меню Пуск (Start) Настройка\Принтеры (Settings\Printers). Для нормальной работы макроса не требуется печатать на принтере или подключать его. Просто необходимо задать в Word использование двух принтеров.

До настоящего момента можно было обойтись без форм. Однако не все стандартные диалоговые окна справляются с поставленной задачей. Поэтому построим диалоговое окно на основе формы.
  1. Откройте шаблон или документ, в который требуется добавить макрос. Выберите команду Сервис\Макрос\Мак-росы, введите в поле Имя Maкроса (Macro Name) имя "ChoosePrinter", а затем нажмите кнопку Создать для запуска редактора Visual Basic.

2. Выберите команду Вставка\Форма (Insert\UserForm), чтобы создать форму и открыть ее. В случае необходимости выберите команду Вид\Панель элементов управления (View\Toolbox) для вывода панели элементов управления.

3. В окне свойств измените имя формы на "frmPrinter" и введите ее заголовок Выбор принтера.

4. Разместите в форме переключатель. Присвойте ему имя "optColor" и задайте связанную с ним надпись Цветной принтер. Создайте еще один переключатель, назвав его "optLaser" и задав заголовок Лазерный принтер.

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

5. Поскольку печать на цветном принтере стоит недешево, необходимо напомнить пользователям о том, что принтер не следует использовать для черновиков. Разместите в форме надпись, а затем задайте ей "lblPrintInfo" и текст "Внимание: цветной принтер используется только для окончательных распечаток!".

6. Разместите в форме кнопку. Задайте ей имя "cmdOK" и надпись OK. Чтобы предусмотреть возможность закрыть диалоговое окно, не выполняя действий, создайте кнопку "cmdCancel" и укажите для нее надпись Отмена.

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




Рис. 10.6  Созданное диалоговое окно Выбор принтера


1. Откройте диалоговое окно Принтеры (Printers), выбрав команду Пуск\Настройка\Принтеры для вывода имен установленных принтеров. Не требуется знать номера и типы принтеров, достаточно только помнить их названия, например: "Цветной принтер" и "Обычный принтер".

2. Запустите редактор Visual Basic из Word, щелкните правой кнопкой мыши по переключателю optСolor и выберите из контекстного меню команду Программа (View Code). Открывается окно модуля.

3. В процедуре Сlick для переключателя optColor введите инструкцию ActivePrinter = "Цветной Принтер". Процедура должна выглядеть следующим образом:


Private Sub optColor_Click()

ActivePrinter = "Цветной Принтер"

End Sub


4. Откройте форму, выберите переключатель optLaser и выполните то же самое для него, указав в инструкции строку "Лазерный принтер".

5. Откройте окно модуля для кнопок cmdOK и cmdCancel и введите в процедуры обработки их события Click инструкцию frmPrinter.Hide для закрытия формы при нажатии этих кнопок. В подпрограмму для кнопки cmdCancel добавьте также строку

cmdCancel.Cancel = True,

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

Форма почти готова. Сохраните проект. Полная распечатка текста процедур выглядит следующим образом:


Private Sub cmdCancel_Click()

frmPrinter.Hide

cmdCancel.Cancel = True

End Sub


Private Sub cmdOK_Click()

frmPrinter.Hide

End Sub


Private Sub optLaser_Click()

ActivePrinter = "Лазерный принтер"

End Sub

Private Sub optColor_Click()

ActivePrinter = "Цветной принтер"

End Sub


Теперь можно запустить форму из редактора Visual Basic. Чтобы запустить ее из Word, требуется модуль: как уже отмечалось ранее, Word не добавляет формы к списку макросов. Откройте окно проекта в редакторе VBA, щелкните правой кнопкой мыши по требуемому проекту и выберите команду Вставка\Модуль (Insert\Module). Назовите модуль "ChoosePrinter" и создайте подпрограмму, содержащую только одну строку:

frmPrinter.Show

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





Рис. 10.7  Диалоговое окно Выбор принтера (в режиме выполнения)


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