Книга: 1001 совет по обустройству компьютера

10.5.2. Создание макроса

10.5.2. Создание макроса

Теперь можно приступать к созданию макроса. Предварительно скопируйте какой-нибудь текст в буфер обмена. Затем щелкните на пункте Запись макроса (Макрос | Начать запись в Word 2003), введите имя макроса, например, PasteNormalText (никогда не оставляйте ничего не говорящие названия по умолчанию, вроде Macrosl – через неделю вы гарантированно забудете, что скрывается за этим названием) и через кнопку Назначить макрос | Клавишам назначьте ему сочетание клавиш <Ctrl>+<V>. Сразу после начала записи обратитесь к пресловутому меню Специальная вставка и вставьте содержимое буфера, как «неформатированный текст». После этого остановите запись, обратитесь опять к меню Макросы и нажмите на кнопку Изменить.

Вы увидите окно редактора Visual Basic, и в нем – заготовку нашего макроса под названием PasteNormalText. Весь текст собственно макроса будет состоять из одной строки с командой что-то вроде selection.PasteFormat с параметром в скобках. Эту строку надо изменить на следующий текст:

Selection.PasteSpecial DataType:=wdPasteText

Нажмите <Ctrl>+<S>, чтобы сохранить изменения, перейдите в окно Word и проверьте – данные из буфера должны вставляться с сохранением форматирования уже имеющегося текста (картинки и другие объекты, кстати, теперь можно будет вставлять только комбинацией клавиш <Shift>+<Ins>). Если вы забыли назначить горячую клавишу перед началом записи, то ее можно назначить потом – через пункт Настройки, только выбрав из меню не команды, а Макросы.

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

В простейших случаях для этого даже не придется изучать Visual Basic – к Word прилагается достаточно подробная справка по всем функциям Word Basic, правда, на английском языке. В старых версиях Word, возможно, эту справку придется специально доустановить с установочного диска, а если вы разыщете ее для русской версии Office 97, то она может даже оказаться на русском – сами функции с тех пор почти не изменились.

Элементы Visual Basic

В Microsoft Word и некоторых других компонентах Office для написания макросов применяется разновидность (подмножество) языка Visual Basic, иногда называемое Word Visual Basic, или, для краткости, просто Word Basic. В этом языке применимы все инструкции, процедуры и функции обычного языка Visual Basic, включая даже прямой вызов системных функций Windows API – чем и пользуются создатели макровирусов, распространяемых уже несколько лет. Для любознательных поясним построение системы Word Basic в самом общем и сильно упрощенном виде – чтобы знать, что искать в справке.

Все, что вы видите в окне, например, Microsoft Word, представляет собой совокупность объектов. Есть объекты Window, Document, Paragraph и т. п. – так, в приведенных примерах вы видели объект под названием Selection, который представляет собой выделенный текст. Каждый из объектов обладает собственным набором свойств и методов. Свойства с их значениями – это то, что описывает наш объект в каждый конкретный момент времени, мы их можем задавать либо непосредственно в программе (макросе), либо через вызов методов – процедур, которые выполняются либо автоматически, либо через диалог с пользователем. Почти каждый из методов обладает, в свою очередь, методом Execute, который запускает процедуру применения метода с заданными заранее значениями свойств.

Существует теоретически неограниченная вложенность этих понятий – так, каждый объект может включать другие объекты, с их свойствами или методами, а те свои, и так до бесконечности. Чтобы не потеряться в этой крайне запутанной иерархии и указать точную принадлежность свойства или метода, их записывают через точку, начиная с самого старшего владельца. В нашем случае, например, объект Selection имеет метод PasteSpeciai (что в переводе и означает «специальная вставка»). Пример более сложной иерархии: Selection включает объект Find («найти»), который включает объект Replacement («замена»), который включает объект Font («шрифт»), который, в свою очередь, имеет свойства Bold, Italic, Name, Size и т. п. Bold или Italic представляют собой переменную булевского типа, т. е. могут принимать одно из двух значений: True («правда») или False («ложь»). Size («размер») – естественно, число (причем оно может быть и дробным), а свойство Name есть обычная строка с названием шрифта. Поэтому, чтобы объявить в программе замещающий текст «полужирным», следует вставить такой оператор: Selection.Find.Replacement.Font.Bold = True. Для сокращения записи при манипуляции свойствами одного и того же владельца можно использовать инструкцию With:

With Selection.Find.Replacement.Font

.Name = "Courier New"

.Bold = True

.Size = 7.5

End With

Отметим, что разные объекты разного уровня могут иметь, естественно, одинаковые свойства и методы – так, наряду со свойством Selection.Find.Replacement.Font (шрифт замещающего текста) может встречаться и свойство просто Selection.Find.Font (т. е. шрифт исходного текста для поиска). Таким образом, чтобы разыскать нужный объект или метод в справке по Word Basic, вы начинаете с главного объекта, который вам подсказывает автоматически созданная заготовка для макроса (например, Selection), а потом ищете в его характеристиках нужные свойства (Properties) или методы (Methods). Не пытайтесь там что-то найти поиском – в справке по Visual Basic он почему-то работает очень плохо.

Оглавление книги


Генерация: 0.940. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз