Читаем Интернет-журнал "Домашняя лаборатория", 2007 №7 полностью

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

Rightlndent = CentimetersToPoints(0)

SpaceBefore = 0. SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1.27)

End With

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



Рис. 5.11. Справка по слову "ParagraphFormat"


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

Sub Макрос2

' Макрос2 Макрос

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

'

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(1)

Rightlndent = CentimetersToPoints(1)

SpaceBefore = 1

SpaceAfter = 1

LineSpacingRule = wdLineSpacelpt5

Alignment = wdAlignParagraphJustify

WidowControl = True

KeepWithNext = False

KeepTogether = False

PageBreakBefore = False

NoLineNumber = False

Hyphenation = True

FirstLineIndent = CentimetersToPoints(1.27)

OutlineLevel = wdOutlineLevelBodyText

End With

End Sub

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

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

* * *

НЕБОЛЬШОЕ ОТСТУПЛЕНИЕ.

Средство записи макросов Visual Basic for Applications отслеживает не столько действия пользователя, сколько изменения параметров текста. Поэтому при задании свойств абзаца с помощью соответствующего диалогового окна "Формат — Абзац" оно скрупулезно записывает в макрос все параметры этого диалогового окна, которые в нем были заданы при нажатии кнопки Ок. Если абзацы имели разное оформление, которое не было изменено в данный момент на единообразное, то те пункты данного диалогового окна, которые остались различными у разных абзацев в выделении, будут иметь неопределенное значение, и средство записи макросов не сможет их поместить в текст записываемого макроса. В самом же диалоговом окне подобные неопределенные опции отображаются галочкой на сером фоне (рис. 5.12), а в полях указания размеров отступов не стоят их значения.



Рис. 5.12.Диалоговое окно установки параметров абзаца с неопределенными опциями.


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

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

Если при вызове диалогового окна параметров текста или шрифта во время записи макроса в документе ничего не было выделено, то будут определены все параметры диалогового окна, и в макрос попадут все свойства, могущие быть указанными в окне. Установленные параметры будут использоваться для вновь набираемого текста.

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



Рис. 5.13.Параметры этого окна определены всегда.

* * *

Идем дальше.

Selection.Find.ClearFormatting

Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.ParagraphFormat.Alignment

wdAlignParagraphJustify

With Selection.Find

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAHWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

Перейти на страницу:

Похожие книги