Литмир - Электронная Библиотека

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

Насколько помнится, при записи макроса мы вызывали функцию замены Word для изменения всего выравнивания абзацев по левому краю на выравнивание по ширине. И вот перед нами эта функция, вызов которой записан на языке Visual Basic for Applications. По всей видимости, строчка "Selection.Find.ClearFormatting" означает очищение параметров форматирования в окне замены — эквивалент нажатию кнопки "Снять форматирование", а фразы "Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft" и "Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify" — установка параметров того, что надо искать выравнивания "Left" (то есть по левому краю) и того, на что надо заменять — выравнивания "Justify" (по ширине). Нетрудно было догадаться — просто переведя с английского языка значения слов, входящих в команды: "Selection" — выделение, "Find.Replacement" — найти и заменить, "ParagraphFormat" — формат абзаца, "Alignment" — выравнивание, "AlignParagraphJustify" "РавнятьАбзацПоШирине". Что ж, ясно. Оператор "With" нам уже знаком — в следующим за разобранными нами строчками фрагменте речь пойдет об окне "Найти и заменить" (рис. 5.14).

Рис. 5.14. Вызов этой функции на языке Visual Basic for Applications описан в тексте.

Легко сообразить, что все параметры объекта "Selection.Find" (то есть поиска в выделенной части текста или во всем тексте) соответствуют параметрам окна "Найти и заменить": ".MatchWholeWord" — "искать целое слово", ".MatchCase" — "учитывать регистр".".Text" — здесь, наверное, надо указать заменяемый текст, а". Replacement.Text" — здесь то, на что заменить. В нашем случае заменять надо не текст, а форматирование, поэтому эти строчки пусты.

Заметив повторения слов ''''Selection. Find" в первых четырех строчках, можно посчитать, что и их содержимое можно включить в блок оператора "With". Проверим-ка это. Чуть ниже последнего записанного нами макроса напишем строчку: "Sub experiencel()" (имя после "Sub" может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой Visual Basic for Application). Нажмем Ввод — парой строчек ниже редактор Visual Basic for Applications напишет: "End Sub". С помощью команд "Копировать" и "Вставить" скопируем из нашей программы в текст нового макроса блок "With Selection.Find". А затем переместим все строчки, относящиеся к отражению в макросе работы окна "Найти и заменить" в блок "With Selection.Find", убрав слова "Selection.Find":

Sub experiencel()

With Selection.Find

ClearFormatting

ParagraphFormat.Alignment = wdAlignParagraphLeft

Replacement.ClearFormatting

Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify.Text = ””

Replacement.Text = ””

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAHWordForms = False

Execute Replace:=wdReplaceAll

End With

End Sub

Попробуем программу в деле. Откроем еще один документ из общего набора и запустим клавишей F5 новый макрос на выполнение (курсор должен стоять внутри текста запускаемого макроса)…

Все прекрасно! Замена произошла так, как необходимо. Значит, ясно — так сокращать текст программы можно.

Осталось еще несколько интересных строчек, конкретное значение которых может вызвать вопросы — ".Forward = True", ".Wrap = wdFindContinue", ".Execute Replace:=wdReplaceAll". Ну, первая — это направление поиска вперед или назад (в последнем случае там было бы значение "False" — то есть "не вперед"). Но что значит вторая? А запишем-ка для выяснения еще макрос с такой же заменой выравнивания влево на выравнивание по ширине, но с разными параметрами направления поиска. Просто в режиме записи макроса вызовем несколько раз диалог поиска и замены, указывая каждый раз в нем разные параметры.

Вот что получилось:

Параметры поиска ∙ Записанный фрагмент кода

Вперед, с согласием на продолжение поиска

Forward = True

Wrap = wdFindAsk

Назад, с согласием на продолжение поиска

Forward = False

Wrap = wdFindAsk

Вперед, без согласия на продолжение поиска

Forward = True

Wrap = wdFindAsk

Назад, без согласия на продолжение поиска

Forward = False

Wrap = wdFindAsk

Везде

Forward = True

Wrap = wdFindContinue

Видно, что наличие или отсутствие согласия на продолжение поиска, даваемое в выскакивающем запросе, не влияет на записываемый текст. А как же тогда отказаться от этого запроса на продолжение — ведь в готовой программе он явно неуместен? Откроем текст макроса и поставим после команды".Wrap" еще один знак "=" (рис. 5.15). Выпал список возможных продолжений.

Рис. 5.15. Вот так можно определить возможные значения параметра…

Ну вот, все и ясно — так как значения".wdFindAsk" и".wdFindContinue" мы уже перебирали, то для отказа от продолжения замены после достижения конца документа нужно поставить значение параметра".Wrap" как "wdFindStop". То есть вышеприведенная таблица должна иметь вид

Параметры поиска ∙ Необходимый фрагмент кода

Вперед, с согласием на продолжение поиска

Forward = True

Wrap = wdFindAsk

Назад, с согласием на продолжение поиска

Forward = False

Wrap = wdFindAsk

Вперед, без согласия на продолжение поиска

Forward = True

Wrap = wdFindStop

Назад, без согласия на продолжение поиска

Forward = False

Wrap = wdFindStop

Везде

Forward = True

Wrap = wdFindContinue

Осталось разобраться со строчкой".Execute Replace:=wdReplaceAll". По логике вещей, это должна быть команда запуска поиска, тем более что и слово "Execute" означает "Запустить". Посмотрим в справке — по слову "Execute" (рис. 5.16).

Рис. 5.16. Справка по слову Execute.

Так, получаем четыре ссылки: "For information about the Execute method, click one of the following object names: Dialog, Find, KeyBinding, MailMerge". В Microsoft Office 2000/XP это окно Справочной системы VBA несколько красивее, но перечень объектов, к котором может быть применен метод Execute, в нем такой же, разве что отдельно приводятся ссылки на примеры кода. Нас интересует вторая ссылка — "Find", так как мы работаем именно с этим объектом. Открываем (рис. 5.17)…

250
{"b":"870523","o":1}