Шрифт:
Интервал:
Закладка:
.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.ParagraphFormat.Alignment = wdAlignParagraphJustify" — установка параметров того, что надо искать — выравнивания "Left" (то есть по левому краю) и того, на что надо заменять — выравнивания "Justify" (по ширине). Нетрудно было догадаться — просто переведя с английского языка значения слов, входящих в команды: "Selection" — выделение, "Find.Replacement" — найти и заменить, "ParagraphFormat" — формат абзаца, "Alignment" — выравнивание, "AlignParagraphJustify" — "РавнятьАбзацПоШирине". Что ж, ясно. Оператор "With" нам уже знаком — в следующим за разобранными нами строчками фрагменте речь пойдет об окне "Найти и заменить".
Легко сообразить, что все параметры объекта "Selection.Find" (то есть поиска в выделенной части текста или во всем тексте) соответствуют параметрам окна "Найти и заменить": ".MatchWholeWord" — "искать целое слово", ".MatchCase" — "учитывать регистр".".Text" — здесь, наверное, надо указать заменяемый текст, а".Replacement.Text" — здесь то, на что заменить. В нашем случае заменять надо не текст, а форматирование, поэтому эти строчки пусты.
Заметив повторения слов "Selection.Find" в первых четырех строчках, можно посчитать, что и их содержимое можно включить в блок оператора "With". Проверим-ка это. Чуть ниже последнего записанного нами макроса напишем строчку: "Sub experiencel()" (имя после "Sub" может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой VBA). Нажмем Ввод — парой строчек ниже редактор VBA напишет: "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
.MatchAllWordForms = 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" еще один знак "=" (рис. 3.7).
Рис. 3.7. Вот так можно определить возможные значения параметра
Ну вот, все и ясно — для отказа от продолжения замены после достижения конца документа нужно поставить значение параметра".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". Так, четыре ссылки: "For information about the Execute method, click one of the following object names: Dialog, Find, KeyBinding, MailMerge". Нас интересует вторая — "Find", так как мы работаем именно с этим объектом. Открываем.
Так и есть — команда".Execute" запускает команду поиска и замены на выполнение: "Runs the specified find operation. Returns True if the find operation is successful.". Из текста справки также узнаем, что все параметры поиска и замены можно было бы задать и в скобках, а, кроме того, результат выполнения команды можно записать в переменную — успешен ли был поиск или нет(то есть были ли найдены в данном сеансе работы команды "Найти и заменить" искомые элементы). Сейчас данная возможность не требуется, однако запомнить ее стоит — мало ли когда пригодится.
Продолжаем изучать записанную макрокоманду.
ActiveDocument.Save
Вопросов не вызывает — это команда сохранения активного документа.
ActiveDocument.SaveAs FileName:="Доклад1.rtf", FileFormat:=wdFormatRTF, LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= False
А вот здесь уже понадобится редактирование. Это команда "Сохранить Как…" — поскольку соответствующая команда Word представляет собой диалоговое окно, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: "AddToRecentFiles" — добавлять ли ярлык в папку "Recent", "EmbedTrueTypeFonts" — внедрять ли шрифты TrueType. Наиболее интересны элементы "FileName:="Доклад1.rtf"" и "FileFormat:=wdFormatRTF" имя файла,
- Интернет-журнал 'Домашняя лаборатория', 2007 №2 - Журнал «Домашняя лаборатория» - Газеты и журналы / Сделай сам / Хобби и ремесла
- Интернет-журнал 'Домашняя лаборатория', 2008 №5 - Журнал «Домашняя лаборатория» - Газеты и журналы / Периодические издания / Сделай сам / Хобби и ремесла
- Интернет-журнал 'Домашняя лаборатория', 2007 №4 - Арчер - Газеты и журналы / Сделай сам / Хобби и ремесла
- Интернет-журнал 'Домашняя лаборатория', 2007 №4 - Чернованова - Газеты и журналы / Сделай сам / Хобби и ремесла
- Интернет-журнал 'Домашняя лаборатория', 2007 №4 - Шаман - Газеты и журналы / Сделай сам / Хобби и ремесла
- Отзыв на книгу Э.Э. Годика «Загадка экстрасенсов» - Сергей Кернбах - Периодические издания / Эзотерика
- «Если», 2016 № 02 - Журнал «Если» - Газеты и журналы / Научная Фантастика
- «Если», 2005 № 06 - Журнал «Если» - Периодические издания
- Обнаружение скрытых эмоций в голосе - Евгений Столов - Прочая детская литература / Детская образовательная литература / Сделай сам
- Лаборатория юного физика - Гальперштейн Леонид Яковлевич - Хобби и ремесла