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

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

* * *

Идем дальше.

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

MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

Насколько помнится, при записи макроса мы вызывали функцию замены Word для изменения всего выравнивания абзацев по левому краю на выравнивание по ширине. И вот перед нами эта функция, вызов которой записан на языке VBA. По всей видимости, строчка 'Selection.Find.ClearFormatting' означает очищение параметров форматирования в окне замены — эквивалент нажатию кнопки 'Снять форматирование', а фразы 'Selection.Find.ParagraphFormat.Alignment = wdAlign ParagraphLeft' и 'Selection.Find.Replacement.Paragraph Format.Alignment = wdAlignParagraphJustify' — установка параметров того, что надо искать — выравнивания «Left» (то есть по левому краю) и того, на что надо заменять — выравнивания «Justify» (по ширине). Нетрудно было догадаться — просто переведя с английского языка значения слов, входящих в команды: «Selection» — выделение, 'Find.Replacement' — найти и заменить, «ParagraphFormat» — формат абзаца, «Alignment» — выравнивание, 'AlignParagraphJustify' — «РавнятьАбзацПоШирине». Что ж, ясно. Оператор «With» нам уже знаком — в следующим за разобранными нами строчками фрагменте речь пойдет об окне 'Найти и заменить'.

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

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

Sub experience1()

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

MatchAllWordForms = False

Execute Replace:=wdReplaceAll

End With

End Sub

Попробуем программу в деле. Откроем еще один документ из общего набора и запустим клавишей F5 новый макрос на выполнение (курсор должен стоять внутри текста запускаемого макроса). Все прекрасно! Замена произошла так, как необходимо. Значит, ясно — так сокращать текст программы можно.

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

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

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

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

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

0

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

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