Rambler's Top100 WWW.TEKCT.RU
Прибамбасы для MS Word*

(Журнал "UPGRADE", #5 2002г.)

  С помощью макросов удобно разнообразить меню редактора Word. Когда много работаешь, то среди трех сотен его инструментов все равно не оказывается именно такого, который нужен. Приходится «изготавливать» его самостоятельно. Вот несколько образцов.
  Макрос 1. Часто при наборе текста мы форматируем слова курсивом или полужирным. Для этого приходится выделять по отдельности каждое слово. Когда я, например, пишу какой-нибудь текст по компьютерам, то приходится десятки слов выделять курсивом или полужирным. В конце концов, я пришел к выводу, что выделять слова путем сложных манипуляций мышью – нерациональная трата времени, а двойные щелчки на тексте быстро надоедают. Простой макрос позволяет выполнять операцию форматирования, когда курсору достаточно просто находиться внутри слова (этот режим работает в Word, только если установлен флажок автоматически выделять слова, а я его обычно сбрасываю). Макрос для создания курсива выглядит так:

Sub Italic_Word()
' Выделение одного слова курсивом
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Font.Italic = wdToggle
    Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Font.Italic = wdToggle
    Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

  Для того чтобы включить в состав редактора этот макрос, сделайте следующее:
  1. Выберите команду Сервис > Макрос > Редактор Visual Basic,
  2. Наберите текст макроса в открывшемся окне (или, еще лучше, скопируйте с помощью буфера обмена),
  3. Закройте окно Microsoft Visual Basic.
  Теперь неплохо бы создать для этого макроса свою кнопку. Чтобы кнопка была узнаваемой, на ней целесообразно поместить букву «К» – такую же, как на кнопке Курсив. Но цвет буквы надо изменить, чтобы не перепутать потом эти две кнопки. Рисунок делаем так:
  1. Выберите команду Вид > Панели инструментов > Настройка,
  2. На вкладке Команды в списке Категории выберите пункт Макросы,
  3. Найдите макрос Italic_Word и перетащите его на одну из панелей инструментов,
  4. Выберите из контекстного меню этого нового инструмента команду Основной стиль,
  5. Выберите из контекстного меню кнопки Курсив команду Копировать значок на кнопке,
  6. Выберите из контекстного меню макроса Italic_Word команду Вставить значок для кнопки, а затем команду Изменить значок на кнопке,
  7. В открывшемся окне Редактор кнопок перекрасьте букву «К» в другой цвет, а затем закройте оба окна диалога.
  Проверьте в действии новый инструмент.Самое главное – не забывайте, что при использовании этого макроса символы выделять не нужно, достаточно щелкнуть мышью на требуемом слове!
  Если этот макрос применить к слову, уже отформатированному курсивом, то курсив будет снят.
  Для того чтобы кнопка макроса осталась на панели инструментов, необходимо изменить шаблон документа Normal.dot. Когда вы будете закрывать Word, программа, возможно, попросит разрешение внести изменения в файл шаблона. Вы должны дать такое разрешение, иначе все ваши труды по созданию макроса пропадут.

  Макрос 2. Аналогично можно ввести в состав Word и макрос для форматирования слова полужирным:

Sub Bold_Word()
' Выделение одного слова полужирным
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Font.Bold = wdToggle
    Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
    Selection.Font.Bold = wdToggle
    Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

  Макрос 3. Потеря времени возникает при импортировании в Word документов в формате «текста MS DOS» из-за того, что каждая строка такого текста оказывается (после импорта) в отдельном абзаце. Программа, естественно, не может автоматически объединить строки в абзацы, потому что для этого нужно, как минимум, понимать смысл текста. Эту операцию потом приходится выполнять вручную. Но для ускорения процесса полезно обзавестись кое-какими инструментами.
  Простейший макрос, который может помочь в этом деле, позволяет удалить последний символ в строке. Если этим символом оказывается символ абзаца, то следующий абзац объединяется с текущим. Такой макрос легко сделать с помощью команды Сервис > Макрос > Начать запись и клавиш End и Delete, но для порядка приведу его текст:

Sub Delete_Last()
' Удаление последнего символа в строке
    Selection.EndKey Unit:=wdLine
    Selection.Delete Unit:=wdCharacter, Count:=1
End Sub

  Рисунок для кнопки предлагаю сделать такой:

Button image

  
  В некоторых случаях эту подпрограмму бывает полезно дополнить еще одной командой для ввода пробела после удаления символа:

Selection.TypeText Text:=" "

  Работать с этим макросом нужно в режиме, который показывает символы абзацев. Перед запуском макроса курсор достаточно установить в любом месте нужной строки. Я обычно сдвигаю курсор клавишей стрелка вниз, а мышью щелкаю на кнопке макроса, и дело идет довольно споро.

  Макрос 4. Более сложный макрос позволяет объединить несколько выделенных абзацев в один:

Sub Only_1_Paragraph()
'Объединение нескольких абзацев в один
    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

  Рисунок для его кнопки может быть таким:

Button image

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

  Макрос 5. Часто при работе с документом возникает проблема выбора языка, на котором набран текст. В Word 2000 существует режим автоматического выбора языков, но он не дает гарантии правильной расстановки этого параметра, а в Word 97 и этого не было, поэтому во многих текстах сложно проверять правописание. Если документ большой, то в нем очень трудно проконтролировать верность установки языка. Например, легко проглядеть, что для части текста задан режим «без проверки», а это может привести к тому, что в этой части останутся ошибки правописания. Поэтому перед проверкой целесообразно запустить макрос, приведенный ниже. Он устанавливает для всего документа параметр языка «русский», а для слов, начинающихся с латинской буквы – «английский». Разумеется, можно придумать массу подобных алгоритмов определения языков, но этот вариант годится для многих задач. Чтобы пользователь не скучал во время выполнения макроса, организован сдвиг курсора от начала до конца документа (прокрутка).

Sub Select_Language()
'Выбор языка для проверки правописания
    Selection.WholeStory
    Selection.LanguageID = wdRussian
    Selection.NoProofing = False
    Selection.HomeKey Unit:=wdStory
    n1 = 0
    w1 = "a"
    se1 = Selection.End
    se2 = -1
        Do While se1 <> se2
        w1 = Left(Trim(Selection.Words(1)), 1)
            If w1 <> "" Then
            n1 = Asc(w1)
                If (n1 >= 65 And n1 <= 90) Or (n1 >= 97 And n1 <= 122) Then
                Selection.Words(1).LanguageID = wdEnglishUS
                Selection.Words(1).NoProofing = False
                End If
            End If
        Selection.MoveRight Unit:=wdWord, Count:=1
        se2 = se1
        se1 = Selection.End
        Loop
    Application.CheckLanguage = True
    If se1 = se2 Then MsgBox "Конец документа"
End Sub

  Поскольку макрос начинает проверку с первого слова документа, не имеет значения, где находится курсор в момент запуска этого макроса.
  А вот подходящий рисунок для кнопки этого макроса:

Button image

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

  • Скопирует (или вырежет) выделенный фрагмент в буфер обмена,
  • Вставит этот фрагмент в другой документ,
  • Создаст во втором документе пустой абзац.

  Пользователь в этом случае работает только с одним документом и не отвлекается на рутинные операции. Текст макроса таков:

Sub To_2()
' Копирование в другой документ
    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
            Selection.Copy
            Windows(m).Activate
            Selection.Paste
            Selection.TypeParagraph
            Windows(n).Activate
            Else
            MsgBox "Выберите 1-й или 2-ой документ в меню 'Окно'"
            End If
    Else
    MsgBox "Надо открыть два документа"
    End If
End Sub

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

Button image

  Макрос 7. Еще одна задача. Случается так, что у пользователя оказываются два варианта одного и того же текста, и требуется найти, чем они отличаются. Открывать два окна, и сравнивать текст «на глаз» – задача не из приятных, особенно если документ большой. В редакторе есть команда «Сравнить версии», но ее использование не всегда удобно. Почему? Во-первых, результат сравнения записывается в документе в виде исправлений. Если в нем уже существуют отмеченные исправления, разобраться потом что есть что очень сложно. Во-вторых, эта команда обрабатывает весь документ и не может работать с его частью. В общем, нужен другой инструмент. Приведенный ниже макрос сравнивает текст по словам, с того места, которое укажет пользователь. Как только будет найдено первое слово, на котором тексты различаются, программа останавливается и отображает результат поиска. Курсоры в обоих документах перемещаются к найденным словам.

Sub Compare_Words()
'Сравнение слов в двух документах
    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
            End If
        Loop
        If se1 = se2 Then MsgBox "Конец документа 1"
        If se3 = se4 Then MsgBox "Конец документа 2"
    Else
    MsgBox "Надо открыть два документа"
    End If
End Sub

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

Button image

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

2002 г.

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


* Авторский вариант статьи

Рейтинг@Mail.ru Rambler's Top100