Word макросы скопировать текст

Обновлено: 06.07.2024

Текстовый документ - один из основных видов документов, наиболее привычный для обычного пользователя. Стандартные возможности Word при работе с такими документами многогранны, тем не менее, в каждой конкретной ситуации возникает необходимость выполнять специфические операции над тем или иным документом. Программная работа с документами Word хотя и проста, но требует некоторых навыков. Приведу фразу из письма одного из читателей, обратившегося на днях ко мне с просьбой помочь ему в решении задачи, возникшей перед ним при работе с документом Word . Он пишет:

Ни по одной книжке по VBA я даже близко не могу понять, как писать макросы для обработки текстовых документов

Конечно, опытные программисты не примут эту фразу всерьез.

Примеры работы с текстовыми документами

Чтобы эффективно работать с текстовыми документами, необходимо хорошо знать объекты Word , описанные в предыдущей лекции. Без знания основных коллекций, задающих структуру документа, - абзацев, предложений, слов, символов, без знания объектов Range и Selection , не обойтись. С другой стороны необходимо владение встроенными функциями VBA для работы со строковыми переменными. Умение работы с объектами Word и функциями VBA позволяет достаточно просто решать самые разнообразные задачи, возникающие в ходе работы с текстовыми документами. В предыдущей лекции, где я рассматривал объекты Word , я приводил большое число примеров, иллюстрирующих работу с теми или иными объектами. Но там рассмотрение шло от "объектов", теперь же я хочу идти от "задач", которые могут возникать при работе с текстовыми документами. Давайте перейдем к рассмотрению некоторых примеров.

Вариации на тему "буфера"

Я начну с самой простой задачи - написания собственных макросов, реализующих известные функции Word "Copy" и "Paste". Пожалуй, при создании любого из документов Word кнопки, реализующие эти функции, нажимаются чаще всего. Всегда полезно понимать, как реализованы стандартные функции, а, кроме того, иногда желательно иметь собственную реализацию, отличающуюся от стандартной. В разумности такого подхода можно будет убедиться даже на этом простом примере.

Копирование текста

Вначале рассмотрим совсем простой случай и напишем два макроса, первый из которых запоминает выделенный текст в буфере, а второй - вставляет текст из буфера в точку вставки, заданную курсором. Для решения задачи необходимо понимать три вещи:

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

Каждая из этих задач решается в одну строчку. Поэтому давайте взглянем на программный текст, а затем я приведу краткий комментарий:

Как видите, буфер задается обычной текстовой переменной VBA . Выделенный текст задается свойством Text объекта Selection . Точка вставки, заданная курсором, также представляется объектом Selection .

Несмотря на простоту этих макросов, я часто использую их наряду со стандартными реализациями Copy - Paste . Дело в том, что при вставке скопированного текста в новое местоположение всегда возникает вопрос, как должен быть отформатирован вставляемый текст (шрифт, размер, курсив и другие свойства), - должно ли использоваться форматирование копируемого текста или форматирование, определяемое контекстом точки вставки. В стандартной реализации при вставке используется форматирование копируемого текста, но во многих случаях предпочтительным является контекст точки вставки. В тех ситуациях, когда необходимо вставлять только текст, сохраняя особенности стиля точки вставки, наши простые макросы предпочтительнее стандартной реализации.

Копирование текста и шрифта

Я рассмотрю сейчас, как можно копировать в буфер не только текст, но и его шрифт. Макросы, которые будут построены, вряд ли стоит использовать на практике, но с учебной точки зрения их рассмотрение представляется полезным. Если необходимо сохранить в буфере не только текст, но и характеристики шрифта, которым этот текст записан, то буфер уже не может быть представлен простой строковой переменной. В подобных случаях, когда необходимо запоминать разнообразные характеристики выделенной области текстового документа, зачастую полезно определить пользовательский тип, задающий требуемые характеристики. Эти общим приемом я и воспользуюсь в данной достаточно простой ситуации. Вот как выглядит теперь определение буфера:

Как видите, вначале дано определение пользовательского типа, содержащего два поля для хранения текста и объекта класса Font . Сам буфер описывается переменной введенного типа TextAndFont .

Чуть усложняются и тексты макросов, решающие задачу копирования и вставки:

Первый из этих макросов не нуждается в особых комментариях. Объект Selection имеет наряду со свойством Text и свойство Font , возвращающее объект данного класса. Эти свойства и передаются в поля переменной, определяющей наш буфер. Казалось бы, что второй макрос должен быть симметричным, поскольку необходимо выполнить такое же присваивание, но в другую сторону. Однако объекты Range и Selection обладают одной особенностью, - их свойству Font нельзя присвоить объект класса Font . Можно, однако, задать характеристики этого объекта, чем я и воспользовался.

Повторяю, этот пример интересен скорее, как программистский прием. Практического значения он не имеет, так как стандартная реализация Copy - Paste решает эту же задачу, обладая при этом дополнительными преимуществами. Заметьте, что эта пара макросов неявно предполагает, что выделенный текст записан одним шрифтом, параметры которого постоянны для всего текста. Если же это не так, то будут использованы параметры конечного участка текста. В то же время стандартная реализация при вставке текста будет сохранять все изменения шрифта выделенного участка текста, что, конечно, представляется более разумным.

Копирование объекта

До сих пор я говорил о копировании выделенного текста. И делал я это потому, что копирование текста это наиболее типичная задача, возникающая при работе с документом Word. Однако понятно, что реально в документе Word выделяется не текст, а некоторая область документа, - объект Range , если говорить в терминах объектов. Я напомню, что объект Range может быть устроен столь же сложно, как и сам документ, и, наряду с текстом, содержать самые разные компоненты, например, рисунки. Стандартная реализация Copy - Paste фактически работает именно с объектом Range . Давайте напишем и мы такую же реализацию. Вот как задается буфер и макросы в подобной реализации:

Реализация макросов в этом случае даже более проста, чем в предыдущем случае. Однако, заметьте, она построена на использовании возможностей стандартного буфера и таких мощных методов работы с ним, как методы Copy и PasteSpecial . Стоит обратить внимание на то, что побочным эффектом этой реализации является изменение содержимого буфера. Конечно, можно было бы запоминать и восстанавливать его содержимое, но вряд ли стоит этим заниматься, поскольку данная реализация вряд ли имеет преимущества по сравнению со стандартной реализацией. Так что из трех пар приведенных макросов, практическую пользу может иметь самая первая и самая простая пара макросов, работающих с простым текстом.

Выборка из текста (файл ms word) предложений и копирование в новый файл (ms word) с определенным форматом
Добрый день. Очень нужна помощь в создании макроса. Есть файлы в которых содержатся вопросы и.


Копирование текста в Word
Всем привет, имеется некоторый текст в Word(первый текст). Мне нужно провести над ним некоторые.

Работать в Word, не открывая документы (работа с закрытыми документами Word)
Дайте ссылку, как работать с закрытыми документами Word. У меня есть 5 шаблонов. Я хочу во всех.

"Пусть надо скопировать текст из текущего файла в новый документ,
' с начала первой страницы, до 11 (включительно)".

> Вместо Range:=r пробуйте Range:=rng

Да, глупая ошибка - я корректировал код, чтобы громоздким не был, только основное, не исправил перед отсылкой. Всё равно та же ошибка в том же месте, т.е.:

' ЗДЕСЬ ВЫДАЁТ ОШИБКУ: Run-time error '13' Type mismath
tmpDoc.Content.InsertFile FileName:=SourceFile, Range:=rng, _
ConfirmConversions:=False, Link:=False, Attachment:=False

' "Пусть надо скопировать текст из текущего файла в новый документ,
' с начала первой страницы, до 11 (включительно)".

Dim rng As Range, s1 As Range, s2 As Range
Dim bm As Bookmarks
Dim tmpDoc As Document
Set bm = ActiveDocument.Bookmarks
' Устанавливаю текущее положение - первая страница
Set s1 = Selection.GoTo(What:=wdGoToPage, Which:=wdGoToFirst, Count:=1, Name:="")
' Создаю закладку
bm.Add ("bm1")
' Устанавливаю текущее положение - 12 страница
Set s2 = Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=12, Name:="")
' Создаю закладку
bm.Add ("bm2")
' Выделяю область
Set rng = ActiveDocument.Range(Start:=bm("bm1").Start, End:=bm("bm2").Start - 1)
' Создаю новый документ
Set tmpDoc = Application.Documents.Add '(Visible:=False)
' Вставляю текст
' ЗДЕСЬ ВЫДАЁТ ОШИБКУ: Run-time error '13' Type mismath
tmpDoc.Content.InsertFile FileName:=SourceFile, Range:=rng, _
ConfirmConversions:=False, Link:=False, Attachment:=False
tmpDoc.Close

Вот так можно поместить содержимое определённых страниц из одного документа в другой (в данном случае помещается всё содержимое первой страницы одного документа в другой):
  1. вставленный вручную (Word 2003: Вставка - Разрыв. - новую страницу или новую колонку);
  2. устанавливаемый программой Word (его видно между страницами в режиме просмотра документа Обычный режим).

ActiveWindow - чтобы понять, что это такое, нужно сделать следующее:
Word 2003 - Окно - Новое. В результате на Панели задач Windows (в самом низу монитора) появится ещё одна кнопка документа: т.е. один и тот же документ может быть открыт несколько раз. Зачем это надо? Я этим никогда не пользовался за всё время работы с Word. Могу предположить, зачем это надо, - чтобы просматривать документ в разных местах одновременно: т.е. в одном окне можем смотреть начало документа, а в другом окне - конец документа и сравнивать что-то в них.

Panes - чтобы понять что такое Panes:
Word 2003 - вставьте сноску (Вставка - Ссылка - Сноска. - Вставить). В результате в документ будет вставлена сноска. Далее: Вид - Обычный - Вид - Сноски. В результате внизу появилось что-то - это и есть Pane: т.е. в данной ситуации у нас два Pane: первый Pane - это собственно документ, а второй Pane - это что-то, связанное со сносками.
У документа всегда есть один Pane - это собственно сам документ. И этот Pane имеет порядковый номер всегда 1 (Panes(1)).

Итак строку кода:

можно прочитать так:
Активный документ - Активное окно - первая Pane - первая страница - первый разрыв на странице (кроме разрыва страницы на странице может быть ещё разрыв раздела) - место в документе, занимаемое этим разрывом страницы (или порядковый номер символа, находящегося вначале страницы. Порядковый номер считается сначала документа) - Start - начало разрыва страницы (начало и конец у разрыва страницы равны).

Подскажите, кто знает: как "буквально", как это происходит в Word-е, копируется ЧАСТЬ ДОКУМЕНТА (не только текст) и вставляется в другой документ. Из того что знаю: используется буфер обмена (мне это не мешает, а бы работало автоматически), но я не знаю как им пользоваться программно.

abc,
методы Copy и Paste. Больше ничем нельзя сохранить форматирование текста.

Мне не нравится использовать буфер обмена в программировании: я считаю, должно быть что-нибудь более развитое и цивилизованное.

Чтобы проверить работу кода: в активном документе должно быть как минимум 2 страницы; документ, в который копируем, должен быть открыт и должен называться Документ2 или Документ2.doc.

Спасибо огромное - вроде как работает, сейчас всё переделаю, и выложу код. Я пока искал решение, часто наталкивался на подобную задачу.
Мне самому не нравится не динам. программирование и через разного рода посредников (типа буфера).
Сейчас важно чтобы знакомый это не вручную делал, пусть из-за буфера будет не оптимально, немного дольше, но НА МНОГО быстрее, чем в ручную.

Ещё такой вопрос (раз так пошло):
А если документ основан на другом шаблоне (не Normal.dot), как ещё и форматирование с шаблона прикрепить.

Привет.
Моя программа сохраняет название стилей, а сами настройки стилей берёт из шаблона по умолчанию (Normal.dot) - такой вывод я сделал на основании того, что форматирование осталось, но стало другим (изменились даже параметры страницы).
А если документ основан на другом шаблоне, то всё форматирование будет описанное по шаблону Normal.dot. Вот я и хочу определить на основе какого шаблона был написан документ из которого идёт копирование (или можно указать в новом документе в качестве шаблона исходный документ) и сделать скопированный документ на этом шаблоне.
Или можно как-то при создании документа указать на основании кого документа или шаблона его создавать.

Добавлено через 15 минут
Там при создании нового документа Application.Documents.Add Можно указать шаблон, на сонове которого надо создать документ. Свойство Template:=srcDoc.FullName.
Всё огромное спасибо за помощь. Сейчас исправлю и выложу что получилось.

Добавлено через 31 минуту
В общем задача состояло в том, чтобы разбить один большой документ на несколько, через определённое количество страниц (в документе должно быть больше одной страницы).

Замечание:
1. код работает правильно только как документ полностью загрузится (все страницы).
2. я писал и проверял код только под OFFICE WORD 2003.
3. Мой макрос называется: SplitFile

Последний вопрос (уже не по теме. лень искать). Как можно создать кнопку на панели для моего макроса и упростить его установку.

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

Чтобы сэкономить время при выполнении часто повторяющихся задач, объедините несколько действий в макрос. Сначала необходимо записать макрос. Затем вы сможете запускать его нажатием кнопки на панели быстрого доступа или с помощью сочетания клавиш. Способ запуска зависит от того, как вы настроите макрос.

Запись макроса, который запускается с помощью кнопки

В меню Вид последовательно выберите пункты Макросы и Записать макрос.

Запись макрокоманды

Введите имя макроса.

Поле имени макроса

Чтобы использовать этот макрос во всех новых документах, проверьте, что в поле Сохранить изменения в указано значение Всех документов (Normal.dotm).

Поле для выбора места сохранения макроса

Чтобы запускать макрос нажатием кнопки, выберите пункт Кнопка.

Выберите этот пункт, чтобы назначить макрос кнопке

Щелкните новый макрос (у него будет имя примерно следующего вида: Normal.NewMacros.<имя вашего макроса>), а затем нажмите кнопку Добавить.

Макрос и кнопка "Добавить"

Кнопка "Изменить" в окне "Настройка панели быстрого доступа"

Выберите изображение для кнопки, введите нужное имя и дважды нажмите OK.

Параметры кнопок в окне "Изменение кнопки"

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

Примечание: Во время записи макроса для выделения текста используйте клавиатуру. Макрос не записывает выделения, сделанные с помощью мыши.

Чтобы остановить запись, в меню Вид последовательно выберите пункты Макросы и Остановить запись.

Команда "Остановить запись"

На панели быстрого доступа появится кнопка для вашего макроса.

Кнопка макроса на панели быстрого запуска

Чтобы запустить макрос, нажмите эту кнопку.

Создание макроса, который запускается с помощью сочетания клавиш

В меню Вид последовательно выберите пункты Макросы и Записать макрос.

Запись макрокоманды

Введите имя макроса.

Поле имени макроса

Чтобы использовать этот макрос во всех новых документах, проверьте, что в поле Сохранить изменения в указано значение Всех документов (Normal.dotm).

Поле для выбора места сохранения макроса

Чтобы запускать макрос с помощью сочетания клавиш, выберите пункт Клавиатура.

Выберите этот пункт, чтобы назначить макрос сочетанию клавиш на клавиатуре

Введите сочетание клавиш в поле Новое сочетание клавиш.

Проверьте, не назначено ли такое же сочетание клавиш какой-либо другой команде. Если такое сочетание клавиш назначено какой-либо другой команде, то попробуйте использовать другое сочетание клавиш.

Чтобы использовать этот макрос во всех новых документах, проверьте, что в поле Сохранить в указано значение Normal.dotm.

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

Примечание: Во время записи макроса для выделения текста используйте клавиатуру. Макрос не записывает выделения, сделанные с помощью мыши.

Чтобы остановить запись, в меню Вид последовательно выберите пункты Макросы и Остановить запись.

Команда "Остановить запись"

Чтобы запустить макрос, нажмите сочетание клавиш.

Чтобы запустить макрос, нажмите кнопку на панели быстрого доступа, нажмите сочетание клавиш или запустите макрос из списка Макросы.

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

В пункте Имя макроса выберите в списке макрос, который вы хотите запустить.

Чтобы сделать макрос в одном документе доступным во всех новых документах, добавьте его в шаблон Normal.dotm.

Откройте документ, в котором содержится макрос.

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

Копка "Организатор" в поле "Просмотр макросов"

Щелкните макрос, который вы хотите добавить в шаблон Normal.dotm, а затем нажмите кнопку Копировать.

В меню Файл последовательно выберите пункты Параметры и Настроить ленту.

В пункте Выбрать команды из выберите пункт Макросы.

Выберите нужный макрос.

В пункте Настройка ленты выберите вкладку и настраиваемую группу, в которую вы хотите добавить макрос.

Если у вас нет настраиваемой группы, то нажмите кнопку Новая группа. Затем нажмите кнопку Переименовать и введите имя настраиваемой группы.

Чтобы изменить изображение для макроса и ввести нужное имя, нажмите кнопку Переименовать.

Дважды нажмите кнопку OK.

На вкладке Разработчик в группе Код нажмите кнопку Макросы.

В поле Имя макроса введите имя нового макроса.

Примечание: Если новому макросу присвоить то же самое имя, что и макросу, встроенному в Word, новые макрокоманды будут выполняться вместо встроенных. Чтобы просмотреть список встроенных макросов, выберите пункт Команды Word в списке Макросы из.

В списке Макросы из щелкните шаблон или документ, в котором нужно сохранить макрос.

Чтобы макрос был доступен во всех документах, выберите Normal.dotm.

После запуска редактора Visual Basic могут потребоваться дополнительные сведения о работе с языком Visual Basic для приложений. Для получения сведений выберите в меню Help (Справка) пункт Microsoft Visual Basic Help (Справка по Microsoft Visual Basic) или нажмите клавишу F1.

Вы можете записать последовательность действий или создать макрос с нуля, введя код на языке Visual Basic для приложений в редактор Visual Basic.

Примечание: Чтобы работать с макросами в приложении Office Word 2007, необходимо отобразить вкладку Разработчик.

Выберите категорию Основные.

В группе Основные параметры работы с Word установите флажок Показывать вкладку "Разработчик" на ленте.

Примечание: Лента входит в Пользовательский интерфейс Microsoft Office Fluent.

На вкладке Разработчик в группе Код нажмите кнопку Запись макроса.

В поле Имя макроса введите имя нового макроса.

Примечание: Если новому макросу присвоить то же самое имя, что и макросу, встроенному в Office Word 2007, новые макрокоманды будут выполняться вместо встроенных. Чтобы просмотреть список встроенных макросов, на вкладке Разработчик в группе Код нажмите кнопку Макросы. В списке Макросы из выберите вариант Команды Word.

В списке Макрос доступен для щелкните шаблон или документ, в котором нужно сохранить макрос.

Важно: Чтобы макрос был доступен во всех документах, выберите Normal.dotm.

Введите описание макроса в поле Описание.

Выполните одно из указанных ниже действий.

Начните запись. Чтобы начать запись макроса, не связывая его с кнопкой на панели быстрого доступа или сочетанием клавиш, нажмите кнопку ОК.

Создайте кнопку. Чтобы связать макрос с кнопкой на панели быстрого доступа, сделайте следующее:

Щелкните кнопке.

В группе Настройка панели быстрого доступа выберите документ или все документы, для которых требуется добавить макрос на панель быстрого доступа.

Важно: Чтобы макрос был доступен во всех документах, выберите Normal.dotm.

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

Чтобы настроить кнопку, нажмите кнопку Изменить.

В поле Символ выберите нужный символ для кнопки.

В поле Отображаемое имя введите имя макроса, которое должно отображаться.

Чтобы начать запись макроса, нажмите кнопку ОК два раза.

На панели быстрого доступа будет показан выбранный символ. Заданное имя отображается при наведении указателя на символ.

Назначьте сочетание клавиш. Чтобы назначить макросу сочетание клавиш, сделайте следующее:

Выберите пункт Клавиатура.

В списке Команды выберите макрос, который требуется записать.

В поле Новое сочетание клавиш введите любую последовательность клавиш и нажмите кнопку Назначить.

Чтобы начать запись макроса, нажмите кнопку Закрыть.

Выполните действия, которые следует включить в макрос.

Примечание: При записи макроса вы можете с помощью мыши щелкать команды и параметры, но не выделять текст. Для выделения текста необходимо использовать клавиатуру. Дополнительные сведения о выделении текста с помощью клавиатуры см. в статье Выделение текста.

Чтобы остановить запись макрокоманд, выберите команду Остановить запись в группе Код.

Изменение сочетания клавиш для макроса

Выберите команду Настройка .

Рядом с полем Сочетания клавиш нажмите Настройка.

В списке Категории выберите пункт Макросы.

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

Щелкните поле Новое сочетание клавиш и нажмите клавиши, которые следует назначить.

В поле Текущие сочетания проверьте, не используется ли назначаемое сочетание для выполнения другой задачи.

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

Важно: Чтобы макрос был доступен во всех документах, выберите Normal.dotm.

На вкладке Разработчик в группе Код выберите пункт Макросы.

В списке Имя макроса выберите макрос, который необходимо запустить.

На вкладке Разработчик в группе Код нажмите кнопку Макросы.

В поле Имя макроса введите имя нового макроса.

Примечание: Если новому макросу присвоить то же самое имя, что и макросу, встроенному в Office Word 2007, новые макрокоманды будут выполняться вместо встроенных. Чтобы просмотреть список встроенных макросов, выберите пункт Команды Word в списке Макросы из.

В списке Макросы из щелкните шаблон или документ, в котором нужно сохранить макрос.

Чтобы макрос был доступен во всех документах, выберите Normal.dotm.

После запуска редактора Visual Basic могут потребоваться дополнительные сведения о работе с языком Visual Basic для приложений. Для получения сведений выберите в меню Help (Справка) пункт Microsoft Visual Basic Help (Справка по Microsoft Visual Basic) или нажмите клавишу F1.

Чтобы быстро выполнять часто повторяющиеся задачи, в классической версии Word вы можете объединить шаги в макросы, а затем запускать их одним щелчком мыши. В Word в Интернете такие задачи придется выполнять вручную.

Если у вас есть Word, нажмите кнопку Открыть в Word, чтобы открыть документ в Word.

Изображение команды "Открыть в настольном приложении"

Затем следуйте инструкциям для классических версий Word.

Если вы запустите макрос в Word и сохраните документ, вы увидите результаты работы макроса при повторном открытии документа в Word в Интернете.

Сведем рутину к минимуму, или Семь задач для MS Word с оркестром


Конечно, речь пойдет о макросах. Именно с их помощью так удобно и легко разнообразить меню редактора Word. Когда много работаешь с текстами, то среди нескольких сотен его инструментов все равно не оказывается именно того, который нужен. Приходится изготавливать его самостоятельно.

Созданные макросы мы будем выводить на панель инструментов, так что сначала научимся делать кнопки.

1. Выберите команду "Вид" > "Панели инструментов" > "Настройка".
2. На вкладке "Команды" в списке "Категории" выберите пункт "Макросы".
3. Найдите имя созданного макроса и перетащите его на одну из панелей инструментов.
4. Выберите из контекстного меню новой кнопки команду "Основной стиль".
Дальше могут быть варианты - выбрать для новой кнопки готовый значок из списка (42 варианта, обычно подходящего не находится), создать новый значок с нуля или добиться приемлемого компромисса, переделывая один из готовых значков.
5. Выберите готовый значок из набора или скопируйте подходящий значок одной из стандартных кнопок Word (контекстное меню кнопки, команда "Копировать значок на кнопке").
6. Если вы копировали значок со стандартной кнопки, выберите из контекстного меню вашей кнопки команду "Вставить значок для кнопки", а затем - команду "Изменить значок на кнопке". Если выбирали из набора - сразу последнюю.
7. В открывшемся окне "Редактор кнопок" измените значок так, как хочется, а затем закройте оба окна диалога.

Начнем с чего-нибудь попроще - автоматизируем такой инструмент редактора, как деление текста на предложения. Для этого создадим два макроса: один будет объединять два предложения в одно, а другой, наоборот, делить одно предложение на два. Алгоритм первого прост: ищем ближайшую после курсора точку, превращаем ее в запятую, а следующее слово пишем с маленькой буквы.

Sub CombineSentences()
' Объединение двух предложений в одно
With Selection
With.Find
.ClearFormatting
.Text = "."
.Forward = True
.Wrap = wdFindStop
.Execute
End With
.TypeText (",")
.MoveRight Unit:=wdWord
.Range.Case = wdLowerCase
End With
End Sub

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

Sub SplitSentence()
' Деление одного предложения на два
With Selection
With.Find
.ClearFormatting
.Text = ","
.Forward = True
.Wrap = wdFindStop
.Execute
End With
.TypeText (".")
.MoveRight Unit:=wdWord
.Range.Case = wdUpperCase
End With
End Sub

Во время работы с этим макросом нужно видеть символы абзацев - выделяя несколько абзацев, следите, чтобы символ конца последнего абзаца тоже был выделен.

Бывает нужно изменить форматирование целого абзаца - чтобы он стал весь полужирный или, скажем, курсивный (например, вы так подзаголовки выделяете, или же текст, с которым вы работаете, - интервью). Для этого можно использовать следующий макрос (курсор может стоять в любом месте абзаца).

Sub ParagraphBold()
' Выделение абзаца полужирным
With Selection
.MoveRight
.MoveUp Unit:=wdParagraph
.MoveDown Unit:=wdParagraph, Extend:=wdExtend
.Font.Bold = True
End With
End Sub
Если в этом макросе заменить в третьей с конца строке Bold на Italic - получите макрос выделения абзаца курсивом, Underline - подчеркиванием, StrikeThrough - перечеркиванием, AllCaps - все буквы станут большими.

Также с помощью макросов можно создавать списки, не применяя специфического форматирования абзацев, а ограничиваясь тире в качестве элемента оформления и точкой с запятой в качестве разделителя (курсор стоит в любом месте первого абзаца).
Sub Listing()
' Создание списка из нескольких абзацев
With Selection
Do
.HomeKey Unit:=wdLine
.MoveRight Extend:=wdExtend
.Range.Case = wdLowerCase
.HomeKey Unit:=wdLine
.TypeText ("- ")
.MoveDown Unit:=wdParagraph
.MoveLeft
.TypeText (";")
.MoveDown Unit:=wdParagraph
If MsgBox("Еще?", vbYesNo + vbQuestion, "") = vbNo Then Exit Do
Loop
.MoveLeft Count:=2
.Delete
.TypeText (".")
End With
End Sub

Часто при работе с документом возникает проблема выбора языка, на котором набран текст. В Word 2000 существует режим автоматического выбора языков, но он не дает гарантии, а в Word 97 и этого не было. Поэтому перед проверкой целесообразно запустить макрос, приведенный ниже. Он устанавливает для всего документа параметр языка "русский", а для слов, начинающихся с латинской буквы - "английский" (где находится курсор в момент запуска этого макроса, не имеет значения).

Sub SetLanguage()
' Выбор языка для проверки правописания
With Selection
.WholeStory
.LanguageID = wdRussian
.NoProofing = False
.HomeKey Unit:=wdStory
n1 = 0
w1 = "a"
se1 =.End
se2 = -1
Do While se1 <> se2
w1 = Left(Trim(.Words(1)), 1)
If w1 <> "" Then
n1 = Asc(w1)
If (n1 >= 65 And n1 = 97 And n1 = 2 Then
If Windows(1).Active = True Then
n = 1
m = 2
End If
If Windows(2).Active = True Then
n = 2
m = 1
End If
If n = 1 Or n = 2 Then
With Selection
.Copy
Windows(m).Activate
.Paste
.TypeParagraph
End With
Windows(n).Activate
Else
MsgBox "Выберите документ, идущий в меню 'Окно' под номером 1 или 2.", vbExclamation, ""
End If
Else
MsgBox "Надо открыть два документа", vbExclamation, ""
End If
End Sub

Для того чтобы этот макрос мог работать, необходимо открыть два документа. Они должны идти под номерами 1 и 2 в меню "Окно". С документами под номерами 3, 4, 5 и так далее макрос работать не будет. Проще всего, конечно, когда открыты только два файла. В том документе (неважно, первый он или второй), куда вы хотите копировать текст, установите курсор на пустой абзац. Перейдите в окно документа, из которого будете копировать текст, выделите фрагмент и запустите макрос. Потом выделите другой фрагмент, снова щелкните кнопку макроса и так далее.

Если фрагменты нужно перемещать, а не копировать, то в тексте макроса слово Copy необходимо заменить словом Cut.

Еще одна задача. Случается так, что у пользователя оказываются два варианта одного и того же текста, и требуется найти, чем они отличаются. Открывать два окна и сравнивать текст "на глаз" - задача не из приятных, особенно если документ большой. В редакторе есть команда "Сравнить версии", но ее использование не всегда удобно. Во-первых, результат сравнения записывается в документе в виде исправлений.

Если в нем уже существуют отмеченные исправления, разобраться потом, что есть что, очень сложно. Во-вторых, эта команда обрабатывает весь документ и не может работать с его частью. В общем, нужен другой инструмент. Приведенный ниже макрос сравнивает текст по словам, с того места, которое укажет пользователь. Как только будет найдено первое слово, на котором тексты различаются, программа останавливается и отображает результат поиска.

Курсоры в обоих документах перемещаютс к найденным словам.

Sub CompareTexts()
' Сравнение текстов в двух документах по словам
If Windows.Count >= 2 Then
se1 = Windows(1).Selection.End
se2 = -1
se3 = Windows(2).Selection.End
se4 = -1
w1 = "a"
w2 = "a"
Do While se1 <> se2 And se3 <> se4 And w1 = w2
Windows(1).Selection.MoveRight Unit:=wdWord, Count:=1
Windows(2).Selection.MoveRight Unit:=wdWord, Count:=1
w1 = Trim(Windows(1).Selection.Words(1))
w2 = Trim(Windows(2).Selection.Words(1))
se2 = se1
se1 = Windows(1).Selection.End
se4 = se3
se3 = Windows(2).Selection.End
If w1 <> w2 Then
MsgBox "Документ 1: " & w1 & " Документ 2: " & w2, vbInformation, ""
End If
Loop
If se1 = se2 Then MsgBox "Конец документа 1", vbInformation, ""
If se3 = se4 Then MsgBox "Конец документа 2", vbInformation, ""
Else
MsgBox "Надо открыть два документа", vbExclamation, ""
End If
End Sub

Так же как и предыдущий, этот макрос работает с двумя документами, которые занимают первое и второе место в списке меню "Окно". Поскольку в этом списке документы сортируются по алфавиту, лучше открыть только два документа. Полезно также использовать команду "Окно" > "Упорядочить все". Курсоры в обоих документах необходимо установить перед соответствующими (одинаковыми) словами в том месте, с которого требуется начать проверку.

Читайте также: