Рис. 3.4. Справка об обьекте 'Font'

Ну, теперь все ясно. Даже примеры приведены, — и очень похожие на наш макрос. Посмотрим тогда ссылку «Properties» вверху окна справки — список свойств шрифта, которые можно задать в программе (рис. 3.5).

Рис. 3.5. Список свойств обьекта 'Font'

Это, кстати, такой же список, как и тот, что выпадает в качестве контекстной подсказки, если при наборе текста программы вручную поставить после слова «Font» точку. Видно, что там есть все свойства шрифта, задаваемые в макросе: и «Name», и «Size», и «ColorIndex». Можно при желании почитать про каждое свойство подробно, но, наверное, лучше разобраться с командой «With», которая встречается и в нашем макросе, и в справке по слову «Font». Ставим на нее курсор и нажимаем F1 (рис. 3.6).

Рис. 3.6. Справка по слову 'With'

Даже на русском (некоторые разделы справки VBA переведены на русский язык). Ну и прекрасно — прочтя справку, узнаем, что 'Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта.' То есть она позволяет сократить обьем кода и облегчить ориентировку программиста в нем, — иначе, без этой функции, рассматриваемый фрагмент кода нашего макроса имел бы вид

Selection.Font.Name = 'Times New Roman'

Selection.Font.Size = 12

Selection.Font.ColorIndex = wdBlack

что и выглядит некрасиво, и места больше требует. Примем к сведению.

Идем дальше:

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

RightIndent = CentimetersToPoints(0)

SpaceBefore = 0

SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1.27)

End With

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

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

Sub Макрос2()

' Макрос записан 26.01.00

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(1)

RightIndent = CentimetersToPoints(1)

SpaceBefore = 1

SpaceAfter = 1

LineSpacingRule = wdLineSpace1pt5

Alignment = wdAlignParagraphJustify

WidowControl = True

KeepWithNext = False

KeepTogether = False

PageBreakBefore = False

NoLineNumber = False

Hyphenation = True

FirstLineIndent = CentimetersToPoints(1)

OutlineLevel = wdOutlineLevelBodyText

End With

End Sub

Что-то не то! Код какой-то большой и много новых команд, которых не было записано в первый раз! Какие-то'.WidowControl', '.KeepWithNext'… Впрочем, ясно, что это свойства абзаца — наверное, 'Контроль висячих строк', 'Не отрывать от следующего'. Но почему же в первый раз записанный код был гораздо меньше, и все было 'по делу'?

Сравним оба случая. В прошлый раз все абзацы в документе были оформлены по-разному, а в этот раз оформление обоих абзацев было одинаковым. Может, в этом дело? И действительно, поэкспериментировав еще (уж не буду здесь приводить все тексты), позаписывав макросы при оформлении разнооформленных абзацев и одинаково оформленных, можно прийти к выводу, что в текст записанного макроса попадают те свойства, которые после установки параметров абзацев через диалоговое окно 'Формат'-'Абзац' оказываются одинаковыми у всех обрабатываемых абзацев! И неважно, были ли эти свойства установлены такими именно сейчас, или когда-то ранее.

Небольшое отступление

Средство записи макросов VBA отслеживает не столько действия пользователя, сколько изменения параметров текста. Поэтому при задании свойств абзаца с помощью соответствующего диалогового окна 'Формат'-'Абзац' оно скрупулезно записывает в макрос все параметры этого диалогового окна, которые в нем были заданы при нажатии кнопки Ok. Если абзацы имели разное оформление, которое не было изменено в данный момент на единообразное, то те пункты данного диалогового окна, которые остались различными у разных абзацев в выделении, будут иметь неопределенное значение, и средство записи макросов не сможет их поместить в текст записываемого макроса. В самом же диалоговом окне подобные неопределенные опции отображаются галочкой на сером фоне, а в полях указания размеров отступов не стоят их значения.

Если же все выделенные абзацы были оформлены единообразно, то все значения диалогового окна 'Формат'-'Абзац' будут определены, и все они попадут в текст макроса.

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату