Параметры таких диалоговых окон, как "Файл — Параметры страницы" или "Файл-Печать" (рис. 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
Насколько помнится, при записи макроса мы вызывали функцию замены 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.
Легко сообразить, что все параметры объекта "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 новый макрос на выполнение (курсор должен стоять внутри текста запускаемого макроса)…
Все прекрасно! Замена произошла так, как необходимо. Значит, ясно — так сокращать текст программы можно.