Упрощаем подготовку постов в MS Word, вер.0.3

Данное руководство теперь совершенно неактуально, поскольку отныне мой оффлайн-редактор (ссылка на крайнюю версию в профиле) позволяет импортировать созданные в MS Word документы, автоматически расставляя нужные теги.

[cut]

[line]

Тут неподалеку было предложение упростить подготовку постов для публикации. Оно навело меня на мысль, что ведь в MS Word есть для этого почти все средства - макросы! Некоторое время назад на работе мне как раз пришлось в срочном порядке освоить азы макросописания для схожих целей - нужно было как раз в огромном документе обрамить тегами жирный/курсивный текст и выделить абзацы. Вот доработанные макросы я и хочу вам предложить.

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

[line]Пока что есть макросы только на выделенный текст и на его выравнивание в абзацах. Мало, конечно, но это потенциально самые частые элементы оформления.

Комментарии к макросам:

  • Сколько я ни бился, не нашел способа отконтролировать достижение конца документа, поэтому выполнение макросов для шрифтов придется прерывать вручную через несколько секунд работы нажатием Ctrl+Break. Если делать по аналогии с макросами для параграфов, то выходит хуже.
  • Заголовки (h1 и h2) я еще не придумал как лучше сделать.
  • После выделенного жирным/курсивом/подчеркиванием/зачеркиванием куска текста (с учетом знаков препинания) должен обязательно идти пробел.
  • Макрос на выравнивание текста в абзацах также добавляет пустые строки между ними (у нас же нет отступа между абзацами).
  • Списки, картинки, таблицы лучше тоже добавлять потом, на всякий случай.

А теперь само руководство по добавлению макросов:

Запускаем MS Word, нажимаем Alt+F11. Появится окошко Visual Basic. Слева будет Project Normal – это проект, который относится к шаблону Normal.dot, из которого по умолчанию создается новый документ. Соответственно, все макросы в этом шаблоне будут доступны во всех документах .doc.

Выбираем Normal в списке, далее правой кнопкой мышки, Insert -> Module (или в меню сверху).

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

[line]

Внимание! Здесь самая важная часть поста!

Сначала дам простенький код, выполнение которого будет заключать выделенный текст в нужные теги. Соответственно, можете сами продублировать все теги, какие тут есть, назначить клавиши - и редактируйте в "ворде" как на сайте. Не забудьте только менять "Unnamed" (название макроса) и "тег" на нужный тег. :)

Public Sub Unnamed()

  With Selection

    .InsertAfter "[/тег]"

    .InsertBefore "[тег]"

  End With

End Sub

[line]

Теперь, собственно, те макросы, о которых я говорил вначале.

Не забудьте удалить в коде лишние пробелы в тегах

(все пробелы из квадратных скобок)

Public Sub FontBoldToTags()

Do While (1)

With Selection

  With .Find

    .ClearFormatting

    .Font.Bold = True

    .Execute FindText:="", Format:=True

  End With

  Do Until .Font.Bold = wdUndefined

    .MoveRight Unit:=wdWord, Extend:=wdExtend

  Loop

  .MoveLeft Unit:=wdWord, Extend:=wdExtend

  .MoveLeft Extend:=wdExtend

  .Font.Bold = False

  .InsertBefore "[b ]"

  .InsertAfter "[/b ]"

  .MoveRight

End With

Loop

End Sub

Public Sub FontItalicToTags()

Do While (1)

With Selection

  With .Find

    .ClearFormatting

    .Font.Italic = True

    .Execute FindText:="", Format:=True

  End With

  Do Until .Font.Italic = wdUndefined

    .MoveRight Unit:=wdWord, Extend:=wdExtend

  Loop

  .MoveLeft Unit:=wdWord, Extend:=wdExtend

  .MoveLeft Extend:=wdExtend

  .Font.Italic = False

  .InsertBefore "[i ]"

  .InsertAfter "[/i ]"

  .MoveRight

End With

Loop

End Sub

Public Sub FontStrikeThroughToTags()

Do While (1)

With Selection

  With .Find

    .ClearFormatting

    .Font.StrikeThrough = True

    .Execute FindText:="", Format:=True

  End With

  Do Until .Font.StrikeThrough = wdUndefined

    .MoveRight Unit:=wdWord, Extend:=wdExtend

  Loop

  .MoveLeft Unit:=wdWord, Extend:=wdExtend

  .MoveLeft Extend:=wdExtend

  .Font.StrikeThrough = False

  .InsertBefore "[s ]"

  .InsertAfter "[/s ]"

  .MoveRight

End With

Loop

End Sub

Public Sub FontUnderlineToTags()

Do While (1)

With Selection

  With .Find

    .ClearFormatting

    .Font.Underline = True

    .Execute FindText:="", Format:=True

  End With

  Do Until .Font.Underline = wdUndefined

    .MoveRight Unit:=wdWord, Extend:=wdExtend

  Loop

  .MoveLeft Unit:=wdWord, Extend:=wdExtend

  .MoveLeft Extend:=wdExtend

  .Font.Underline = False

  .InsertBefore "[u ]"

  .InsertAfter "[/u ]"

  .MoveRight

End With

Loop

End Sub

Public Sub ParagraphTextAlignment()

With ActiveDocument.Content.Find

  .ClearFormatting

  .Replacement.ClearFormatting

  .ParagraphFormat.Alignment = wdAlignParagraphCenter

  .Execute FindText:="", ReplaceWith:="[center ]^&[/center ] ^p", _

  Replace:=wdReplaceAll

  .ParagraphFormat.Alignment = wdAlignParagraphRight

  .Execute FindText:="", ReplaceWith:="[right ]^&[/right ] ^p", _

  Replace:=wdReplaceAll

  .ParagraphFormat.Alignment = wdAlignParagraphLeft

  .Execute FindText:="^p", ReplaceWith:=" ^p^p", _

  Replace:=wdReplaceAll

End With

End Sub

[line]

Чтобы вызвать макрос, в документе нажимаем Alt+F8. Всплывет небольшое окно, в котором нужно выбрать желаемый макрос и нажать «Выполнить».

И последнее: можно добавить кнопки на выполнение нужных макросов в панель быстрого доступа, например. Или, как вариант, назначить им горячие клавиши. В Word’07 для этого нужно ткнуть маленькую стрелочку в панели быстрого доступа (самая верхняя панель, в строке с названием документа), выбрать пункт «Другие команды». В открывшемся окне нам нужны следующие элементы:

Все, настройка закончена, можно пользоваться.

Если что-то забыл, то бейте ногами, но несильно. :)