Нередко простановка HTML тегов в статье занимает почти столько же времени, сколько ее написание. Особенно часто такая проблема возникает со статьями со сложной версткой, включающей множество заголовков, списков, цитат и стилей.
Заметно облегчить работу по подготовке текстов к публикации на web-сайте помогут макросы Word, которые могут автоматизировать любую задачу. Для написания такого макроса требуется знание языка программирования Visual Basic for Applications (VBA), встроенного не только в линейку программных пакетов от MicroSoft, но и многие другие приложения. Однако, благодаря тому, что VBA представляет собой упрощенную версию Visual Basic, начать писать простейшие скрипты может любой пользователь.
Кроме того, упростить задачу по написанию VBA макроса поможет возможность записи всех действий пользователя, которые автоматически преобразуются в программный код. Таким образом, чтобы создать простейший макрос, достаточно:
-
выбрать пункт меню Вид –> Макросы –> Запись макроса;
Использование макросов VBA в MS Word для решения квадратного уравнения
Кликнув по пункту меню Вид –> Макросы –> Запись макроса, вы откроете окно со список всех имеющихся у вас макросов и сможете запустить их, отредактировать или удалить.
Расстановка тегов абзаца в Word при помощи VBA макроса
Предварительная простановка тегов
в тексте перед его размещением требуется при работе со многими CMS. Далеко не все встроенные в web-движки редакторы могут автоматически опознать абзацы в статье и автоматически вставить туда тексты. Кроме того, нередко разбивку текста HTML-тегами требуют и от копирайтеров, чтобы размещение статьи занимало у заказчика как можно меньше времени.
Самый простой способ автоматизировать вставку HTML-тега в Word – это использование опции автозамены (окошко «Найти и заменить»), вызываемой сочетанием клавиш Ctrl+H.
Вставляем в строку «Найти» сочетание ^p, а в строку «Заменить на» ^p и жмем на кнопку «Заменить все». Word автоматически проставит необходимые HTML-теги в тексте.
Чтобы перевести данное действие в макрос, запустим его запись перед выполнением всех действий.
- Включаем запись макроса.
- Выполняем замену абзацев на HTML-теги в тексте при помощи опции «Заменить все».
- Останавливаем запись.
Теперь, чтобы проставить тег в статье, вам будет достаточно нажать единственную кнопку запуска макроса.
Готовый код (помимо простановки тегов, он изменяет шрифт текста на Times New Roman и устанавливает размер 11):
Макрос автозаполнения Word (Ворд). Поиск и замена текста в документе, а также вставка текущей даты
Sub P()
‘
‘
‘
Selection.WholeStory
Selection.Font.Name=»TimesNewRoman»
Selection.Font.Size=11
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=»^p»
.Replacement.Text=»
^p
»
.Forward=True
.Wrap=wdFindAsk
.Format=False
.MatchCase=False
.MatchWholeWord=False
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
Selection.HomeKeyUnit:=wdStory
Selection.TypeTextText:=»
»
Application.Browser.Next
Selection.EndKeyUnit:=wdStory
Selection.TypeBackspace
Selection.TypeBackspace
Selection.TypeBackspace
Selection.TypeBackspace
End Sub
Учтите, что если в конце вашего текста есть много лишних абзацев, то данный VBA скрипт обязательно заменит их на HTML-теги, поэтому обязательно проверяйте то, как выглядит конец статьи, перед ее непосредственной публикацией на сайте.
Как видите, код интуитивно понятный, и многие команды VBA имеют говорящее название, указывающее на их функцию:
- Selection.Find.Replacement.ClearFormatting – заменить в выбранном тексте,
- .Text – текст, который нужно найти;
- .Replacement.Text – текст для замены.
Команда Selection.TypeBackspace обозначение удаление одного символа, стоящего впереди курсора. Она необходима, так как в случае выполнения замены абзацев на HTML-теги
в конце всегда будет находиться лишний открывающий тег .
Продолжим писать наш макрос для «Ворда». Пусть он обрамляет тегами или или текст, выделенный жирным.
Сделать это при помощи автозамены можно так.
В поле «Найти» вставляем текст ( ). В пункте «Формат» выбираем Шрифт –> Полужирный. Ставим галочку в пункте «Подстановочные знаки». В поле «Заменить на» пишем 1. Нажимаем «Заменить все».
У такой опции есть один недостаток: программа расставит обрамляющие HTML-теги не возле вокруг всего «куска» жирного текста, а вокруг каждого слова, следовательно, итоговый код будет очень грязный.
Чтобы исправить эту ошибку, просто заменим на пробел.
Итоговый код (на примере замены на
Sub B()
‘
‘
‘
Selection.Find.ClearFormatting
Selection.Find.Font.Bold=True
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=»()»
.Forward=True
.Wrap=wdFindContinue
.Format=True
.MatchCase=False
.MatchWholeWord=False
.MatchAllWordForms=False
.MatchSoundsLike=False
.MatchWildcards=True
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
WithSelection.Find
.Text = » .Replacement.Text=»»
.Forward=True
.Wrap=wdFindContinue
.Format=False
.MatchCase=False
.MatchWholeWord=False
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
End Sub
Двойные кавычки в коде – это не опечатка, так как именно таким образом осуществляется экранирование кавычек в VBA-скриптах.
Аналогичным способом вы можете дополнить макрос, например, обрамляя курсив тегами #62#47i#60blockquote#60#62.
Автоматическая простановка тегов заголовков
Чтобы автоматически расставить заголовки H1, H2, H3, H4, H5 и H6, необходимо задать для них размер шрифта, отличный от остального текста. Например, если вы пишите статью 12 размером, можно выделять заголовки 16 размером. Тогда опция автозамены будет выглядеть так:
- в поле «Найти» (),
- в поле «Заменить на»
1
,
- ставим галочку «Подстановочные знаки»,
- в разделе «Формат» указываем 16 шрифт.
Затем заменяем лишние «
».
Макрос будет выглядеть следующим образом:
Selection.Find.ClearFormatting
Selection.Find.Font.Size=18
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=»()»
.Replacement.Text=»
1
»
.Forward=True
.Wrap=wdFindContinue
.Format=True
.MatchCase=False
.MatchWholeWord=False
.MatchAllWordForms=False
.MatchSoundsLike=False
.MatchWildcards=True
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Font.Size=16
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=»
»
.Replacement.Text=»»
.Forward=True
.Wrap=wdFindContinue
.Format=True
.MatchCase=False
.MatchWholeWord=False
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
EndSub
Используя приведенные примеры, вы можете создавать собственные макросы, форматируя текст, как вам удобно, что позволит ускорить работу по подготовке тексте перед размещением на сайте.
-
Создание и продвижение сайтов
- Макросы в Microsoft Word
![]() Макросы в Microsoft Word |
Источник: seo-praktika.com
Пишем макросы для Microsoft Word like a PRO [Часть 1]
Возможно, у вас есть ощущение, что тема макросов в Ворде достаточно маргинальная. Кто ими может пользоваться-то вообще? Ну, малварь делают иногда. Да и пишутся они на давно забытом VBA (Visual Basic for Applications, он же несколько урезанный Visual Basic 6 в интерпретируемом виде), фу!
Но на самом деле у многих ведь возникает потребность то какой-нибудь отчётик в ворде написать, то курсовую оформить, то резюме перед отправкой в компанию вашей мечты подправить. А у некоторых работа напрямую связана с Word. Часто различные системы документации предлагают экспорт в форматы doc или docx, которые нужны вашим заказчикам. И бывает, что документы после экспорта выглядят фигово, приходится их исправлять.
Работа в ворде нередко подразумевает выполнение каких-то однообразных повторяющихся действий, которые иногда (но далеко не всегда!) решаются грамотной настройкой стилей и их применением, а также использованием шаблонов. Как же автоматизировать всё остальное? Тут-то нам на помощь приходят те самые макросы.
Что же в них такого хорошего? Ну, например, они автоматически и достаточно быстро выполняют за вас однообразные действия. Могут что-то подсчитать, переформатировать документ, пометить аннотациями подозрительные места, — словом, всё, что запрограммируете. Могут даже в режиме реального времени что-то исправлять и о чем-то предупреждать, пока вы пишете документ. VBA в Word позволяет автоматизировать практически все действия, которые вы можете выполнить с документом вручную.
Макросы можно прикрепить как к конкретному документу (в чём для нас мало пользы, а для писателей троянов это единственная опция), так и к самому ворду, что позволяет применять макросы к любому документу, с которым вы работаете.
Макросы работают в любой версии Word и требуют минимум правок при переносе с одной версии на другую (а чаще всего вообще не требуют). На макросах можно даже реализовать полноценный пользовательский интерфейс с формами!
Давайте же занырнём в Visual Basic и напишем что-нибудь полезное! В качестве первого примера я покажу, как сделать макрос, который заменит два и более последовательных перевода строки на единственный. Это часто требуется при исправлении документов после экспорта из систем документации, или если вы хотите удалить случайно проставленные лишние переводы строк в собственноручно написанном документе. Макрос сделаем добротный, с пользовательским интерфейсом и прогрессом выполнения операции.
Чтобы начать писать или использовать макросы, сначала требуется убедиться, что в Word’е отображается панель «Разработчик» («Developer»). Если она у вас не отображается, следует зайти после создания нового документа в меню «Файл» («File») -> «Параметры» («Options») -> «Настроить ленту» («Customize Ribbon»), после чего найти там и установить флажок «Разработчик» («Developer»).
После этого нужно зайти на вкладку «Разработчик» и выбрать меню «Visual Basic».
В открывшемся окне слева вы увидите два проекта: «Normal» и проект, относящийся к текущему открытому документу. Возможно, в проекте «Normal» у вас уже будет какой-то файл в каталоге «Modules». В любом случае, создайте новый модуль, кликнув правой кнопкой по проекту «Normal» и выбрав «Insert» -> «Module».
Созданный модуль представляет из себя файл, куда мы и будем писать код макросов. Можно переименовать модуль (по умолчанию его имя будет «Module1») в окне «Properties» -> «Name». Я назову свой модуль «AllMacros». Теперь откроем код модуля, дважды кликнув по его имени, и приступим к созданию макроса.
Напомню, что наша цель — заменить два и более последовательных перевода строки на единственный, произведя замены по всему документу. Очевидно, нам потребуется функция, которая осуществляет поиск по тексту, ведь мы хотим найти несколько последовательных переводов строки. В Word это эквивалентно началу нового параграфа. Вы могли бы осуществить поиск начала нового параграфа через обычное окно поиска, введя в поле поиска ^p , ^13 или ^013 (что соответствует ASCII-коду перевода строки). Функция поиска будет выглядеть так:
Источник: kaimi.io
Практические примеры программирования для MS Word
12.1.2. Решение
Добавим в Microsoft Word кнопку, обработчик нажатия которой содержит следующий код (листинг 12.1)
Листинг 12.1. Групповая обработка файлов
Как видите, алгоритм работы программы выглядит так:
- Найти файл
- Открыть его
- Сохранить в новом формате
- Закрыть
Эти шаги повторяются для каждого из файлов. Конструкции, использованные при решении этой задачи, мы рассматривали выше, поэтому у вас не должно возникнуть сложностей при разборе кода. Обратите внимание на то, что директории, пути к которым использованы в программе, должны быть созданы до ее запуска.
Вы можете доработать эту программу. Например, добавить сюда обработчик ошибок, дать пользователю возможность выбирать места для поиска исходных файлов и сохранения новых и т.д. Когда файл открыт, вы можете обрабатывать его любыми средствами Microsoft Word, то есть эта программа может послужить основой для множества программ, направленных на групповую работу с файлами.
12.2. Копирование материалов нескольких документов в один
12.2.1. Условие
Предположим, у вас есть несколько документов, материалы которых вы хотели бы скопировать в новый документ. Ядром этой задачи можно сделать описанную выше программу для конверсии файлов. Но здесь мы поступим по-другому. Предположим, что вы открыли все эти файлы и хотите быстро сбросить их содержимое в новый файл.
12.2.2. Решение
Для решения этой задачи напишем макрос, который должен храниться в глобальном шаблоне. При запуске макроса будет создаваться новый документ, в который будут скопированы материалы всех остальных открытых документов. Эту операцию можно реализовать множеством способов, мы избрали копирование материалов через буфер обмена Windows (листинг 12.2.)
‘Переменная для хранения ссылки на ‘целевой документ Dim obj_TargetD As Document ‘Для хранения ссылки на очередной ‘обрабатываемый документ Dim obj_CurDoc As Document Set obj_TargetD = Documents.Add For Each obj_CurDoc In Documents If obj_CurDoc.Name <> _ obj_TargetD.Name Then ‘Выделяем содержимое очередного документа obj_CurDoc.Content.Select ‘Копируем в буфер обмена Selection.Copy ‘Активируем целевой документ obj_TargetD.Activate ‘Вставляем в текущую позицию курсора ‘материалы из буфера обмена Selection.Paste End If Next
Листинг 12.2.
Добавление материалов различных файлов в один файл
Здесь мы создаем новый документ, в который копируем содержимое остальных открытых документов. Цикл обхода всех объектов коллекции Documents , то есть открытых документов, позволяет получить доступ к каждому открытому документу. Однако, здесь не обойтись без проверки — мы должны обработать все открытые документы кроме того, в который копируем данные. Для этого прежде чем начать обработку, сравниваем имя целевого и текущего документа.
12.3. Разбиение одного документа на несколько
12.3.1. Условие
Задача, противоположная предыдущей. Один открытый документ нужно разбить на несколько, руководствуясь каким-либо признаком, после чего сохранить все документы, дав им соответствующие имена, в папку, заданную пользователем.
Разобъем активный документ на части, по 10 абзацев каждая, и сохраним каждую из частей в отдельном документе с именем такого вида:
12.3.2. Решение
Напишем макрос (листинг 12.3.), который имеет смысл хранить в глобальном шаблоне. Этот макрос будет работать с активным документом.
Листинг 12.3. Разбиваем документ на части
Здесь мы работаем с исходным документом, поабзацно копируя его содержимое в новый документ. В программе использована пара переменных-счетчиков. Одна служит для подсчета количества обработанных абзацев — она используется как индикатор для сохранения или создания очередного файла, а вторая выступает счетчиком номеров созданных файлов и участвует в создании имени файла.
Источник: intuit.ru