12 лет назад 16 октября 2006 в 16:29 95

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

Для того чтобы любой из макросов, описанных в этой статье, начал работать на вас, сделайте следующее.
1. Выберите команду “Сервис” > “Макрос” > “Редактор Visual Basic”.
2. Убедитесь, что редактор сам определяет тип переменных (“Сервис” > “Параметры” > “Редактор”, флажок “явное описание переменных” должен быть снят).
3. Наберите текст макроса в открывшемся окне (это должно быть окно модулей шаблона Normal.dot; если у вас в заголовке не написано “Microsoft Visual Basic – Normal – Module 1” или чего-то очень похожего, то в окошке проектов в левой части экрана щелкните правой кнопкой мыши на заголовке ветви Normal и выберите “Вставить” > “Модуль”).
4. Нажмите кнопку “Сохранить”.
5. Закройте окно Microsoft Visual Basic.

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

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 CombineParagraphs()
‘ Объединение нескольких абзацев в один
p = 0
n = Selection.Characters.Count
For i = n To 1 Step -1
If Asc(Selection.Characters(i)) = 13 Then
p = p + 1
If p > 1 Then
Selection.Characters(i).Delete
End If
End If
Next i
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 <= 90) Or (n1 >= 97 And n1 <= 122) Then
.Words(1).LanguageID = wdEnglishUS
.Words(1).NoProofing = False
End If
End If
.MoveRight Unit:=wdWord
se2 = se1
se1 =.End
Loop
End With
Application.CheckLanguage = True
If se1 = se2 Then MsgBox “Конец документа”, vbInformation, “”
End Sub

“Выгляни в окошко…”

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

Bыводить на экран одновременно два окна и перетаскивать текст – тоже не лучший выход. Следующий макрос позволяет свести к минимуму эти действия. Нужно только выделить нужный фрагмент в тексте и запустить макрос, который:
– скопирует (или вырежет) выделенный фрагмент в буфер обмена;
– вставит этот фрагмент в другой документ;
– создаст во втором документе пустой абзац.
Пользователь в этом случае работает только с одним документом и не отвлекается на рутинные операции.

Sub CopyTo2()
‘ Копирование в другой документ
n = 0
If Windows.Count >= 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

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

Храните шаблоны

Макросы эти работают в Word 97 и в Word 2000. Если вы используете эти или любые другие макросы, то обязательно храните отдельно резервную копию файла Normal.dot – при переустановке MS Office этот файл автоматически заменяется новым, и, если вы не сохраните старый, все нестандартные инструменты придется изготавливать заново.

Автор: Алексей Гончаров

Никто не прокомментировал материал. Есть мысли?