Возможно, у вас есть ощущение, что тема макросов в Ворде достаточно маргинальная. Кто ими может пользоваться-то вообще? Ну, малварь делают иногда… Да и пишутся они на давно забытом 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-коду перевода строки). Функция поиска будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Function FindNextText(text As String, useWildcards As Boolean) Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = text .Forward = True .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchWildcards = useWildcards .MatchSoundsLike = False .MatchAllWordForms = False .Wrap = wdFindStop End With Selection.Find.Execute FindNextText = Selection.Find.Found End Function |
Давайте разберём, что тут происходит. Мы объявляем функцию с двумя параметрами. Первый имеет тип String
— это текст для поиска, а второй Boolean
говорит о том, нужно ли использовать символы подстановки (wildcards). Про них я поговорю позже. В следующих двух строках 2 и 3 мы очищаем форматирование для строки поиска и строки замены, если оно было задано пользователем. Word позволяет задать форматирование строки поиска/замены, а для нашей задачи это не требуется. Далее мы задаём набор параметров для объекта Selection.Find
: выставляем неинтересные нам параметры в False
, параметр Text
— это текст, который мы хотим найти, а параметр MatchWildcards
указывает на использование символов подстановки. Параметр Wrap
говорит о том, следует ли продолжать поиск, когда мы дошли до той точки, с которой поиск начали, и у нас его значение установлено в wdFindStop
, так как мы хотим остановиться, когда дойдём до конца документа, и не зацикливать поиск.
Вообще, всё это обилие свойств и объектов из объектной модели Word, Excel и PowerPoint (да, там тоже есть макросы) хорошо описано в MSDN. Например, вот тут перечислены свойства и методы объекта Find. Есть русская документация (скажем, эта страница), но она выполнена совершенно кринжовым машинным переводом, невозможно читать:
Есть совершенно смехотворные страницы:
В общем, лучше читайте на английском.
Кроме того, все доступные объекты, их свойства и методы можно посмотреть прямо в редакторе VBA в самом Word’е. Для этого нужно нажать F2
или выбрать меню «View» -> «Object browser», что приведет к открытию браузера объектов (Object browser), в котором можно пролистать или поискать то, что вам доступно.
Но вернёмся к нашей функции. На строке 19 мы непосредственно выполняем поиск заданного текста с указанными параметрами. Строка 20 — эта конструкция, аналогичная return
в си-подобных языках, указывает возвращаемое значение функции. Мы возвращаем булевое значение Selection.Find.Found
, которое говорит о том, было ли что-то найдено.
Хочу заметить, что использование объекта Selection.Find
и изменение его свойств заменит их значения и для пользователя. Например, если вы в Word искали что-то хитроумное с конкретно заданными параметрами, то выполнение макроса заменит ваши параметры поиска на те, которые мы задали в макросе. В идеале, их можно запомнить, а потом вернуть, но мы не будем так сильно заморачиваться, а просто всё за собой подчистим. Сделаем функцию, которая сбрасывает параметры в значения по умолчанию:
Private Sub ClearFindAndReplaceParameters() With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = «» .Replacement.Text = «» .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With End Sub |
Обратите внимание, что это уже Sub
, а не Function
, потому что мы не хотим из этой процедуры возвращать никакое значение. Это аналог функции void
в си-подобных языках.
Теперь нужно определить, как нам найти два или более последовательных перевода строки. Для этого нам и потребуются упомянутые ранее wildcards. Word поддерживает символы подстановки при поиске, и по своей функциональности они напоминают регулярные выражения. Кстати, вы можете ими пользоваться и без макросов из окна расширенного поиска:
Хорошее описание символов подстановки я нашел здесь, правда, на английском языке. Составим регулярное выражение для поиска двух и более последовательных переводов строки: [^013]{2,}
. Это очень похоже на классическое регулярное выражение Perl или PCRE, но в квадратных скобках в уникальном стиле Word мы задаем символ перевода строки. Фигурные скобки указывают, что символов перевода подряд должно быть два или более. Тут, кстати, есть нюанс: не во всех версиях/локализациях Word такая регулярка заработает. В некоторых случаях вместо запятой потребуется указать точку с запятой (да, в Microsoft иногда делают крайне странные вещи). Чтобы сделать наш макрос более универсальным, напишем функцию, которая вернёт регулярное выражение, пригодное для поиска в той версии Word, в которой эту функцию запустили:
Private Function GetLineBreakSearchRegExp() On Error GoTo Err FindNextText «[^013]{2,}», True GetLineBreakSearchRegExp = «[^013]{2,}» Exit Function Err: GetLineBreakSearchRegExp = «[^013]{2;}» End Function |
Здесь мы сначала пытаемся осуществить поиск с помощью wildcard’а [^013]{2,}
. Если всё окей, то вернём из функции этот самый wildcard как рабочий (строка 4). В противном случае произойдёт ошибка, но мы готовы её обработать: мы установили обработчик всех ошибок в строке 2. Нас перекинет на метку Err
, и тут мы вернём wildcard, который пригоден для других ревизий Word (в котором запятая внутри фигурных скобок заменена на точку с запятой).
Далее напишем функцию, которая будет заменять несколько последовательных переводов строки на единственный:
Private Sub RemoveNextEnters() Selection.MoveStart wdWord, 1 If Selection.Range.Start <> Selection.Range.End Then Selection.Delete End Sub |
Эта функция подразумевает, что вызывать её будут тогда, когда объект Selection
указывает на найденные несколько переводов строки. В строке 2 перемещаем начало выделения (а в выделены у нас будут все найденные последовательные переводы строки) на один символ вперед, а затем в строке 3, если начало выделения не совпадает с его концом, удаляем его содержимое. Таким образом, если было выделено три перевода строки, мы отступаем вперед на 1 символ (оставляя один перевод строки нетронутым), а затем удаляем оставшиеся два.
Осталось написать последнюю функцию, которая будет всем управлять.
Sub RemoveExcessiveEnters() Dim lineBreakSearchRegExp As String lineBreakSearchRegExp = GetLineBreakSearchRegExp() Selection.HomeKey Unit:=wdStory While FindNextText(lineBreakSearchRegExp, True) = True RemoveNextEnters Wend ClearFindAndReplaceParameters End Sub |
Здесь мы оперируем ранее написанными функциями. Сначала получаем текст регулярного выражения (wildcard’а) для поиска нескольких переводов строки подряд, затем вызовом HomeKey
в строке 5 переходим в самое начало документа (перемещаем туда курсор), а затем в цикле ищем все интересующие нас места и удаляем излишние переводы строки. В конце сбрасываем параметры поиска на значения по умолчанию.
Вот и всё, макрос можно запускать! Обратите внимание, что все функции, кроме последней, мы пометили Private
. Мы не хотим, чтобы их вызывали напрямую. Доступной для вызова снаружи будет только функция RemoveExcessiveEnters
. Перед запуском макроса стоит убедиться, что макросы включены. Если вылазит такая панель, то нужно нажать «Включить содержимое» («Enable content»):
Если такой панели нет, то можно зайти в меню «Файл» («File») -> «Сведения» («Info») и включить макросы уже оттуда:
Вы можете включить макросы на время одного сеанса Word (это по умолчанию и происходит, если нажимаете «Включить содержимое»), так что после перезапуска Word макросы снова будут отключены. Для запуска макроса возвращаемся в Word на панель «Разработчик» и нажимаем кнопку «Макросы» («Macros»), выбираем наш макрос RemoveExcessiveEnters
и нажимаем «Выполнить» («Run»). Разумеется, у вас должен быть открыт какой-нибудь подопытный документ, где имеются лишние переводы строк. В качестве бонуса наш макрос ещё и удалит пустые элементы списков, потому что они представляют из себя точно такие же несколько переводов строки подряд.
Макрос выполняется достаточно быстро. Его действие можно отменить (каждый шаг независимо), открыв меню выполненных действий:
Макросы можно отлаживать через окно VBA, в котором мы писали макрос. Кликнув слева от строки кода, можно, как и в других средах разработки, поставить точку останова, а потом запустить макрос кнопкой «Run». Запустится та функция, на которой у вас находится курсор. Если вы поставите курсор на функцию с параметрами, то появится обычный запрос на выбор макроса для запуска, как при нажатии на кнопку «Макросы» в Word.
Думаю, что материала для одной статьи уже вполне достаточно. Я, конечно, пообещал горы функционала в виде интерфейса пользователя, отслеживания прогресса выполнения, и всё это обязательно будет, но в следующей публикации.
Код макроса можно скачать тут. Вы сможете его импортировать к себе в Word, кликнув правой кнопкой на «Normal» -> «Import file…» и выбрав загруженный файл.
P.S. Кстати, рекомендую создавать бэкапы своих макросов, экспортируя их куда-нибудь на диск. Даже лицензионный Word имеет свойство их иногда по какой-то причине удалять из шаблона Normal, в котором мы их создавали.
Содержание
- VBA PDF (бесплатные загрузки)
- Примеры Word VBA «Шпаргалка»
- Учебное пособие по макросам Word VBA
- Пример простого макроса Word
- Объект документа Word
- Документы
- Диапазон, выделение, абзацы
- Примеры макросов Word
Добро пожаловать в наше мега-руководство по Word VBA / макросам!
Эта страница содержит:
-
- Учебное пособие по Word VBA в формате PDF (бесплатная загрузка)
- Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA.
- Полное руководство по Word VBA / Macro.
- Список всех наших руководств по макросам Word VBA с возможностью поиска
Возможно, вас заинтересует наше интерактивное руководство по VBA для Excel. Хотя некоторые из примеров / упражнений относятся к Excel VBA, большая часть содержимого является общим для всех VBA, и вам может быть полезно изучить такие концепции, как If, Loops, MessageBoxes и т. Д.
VBA PDF (бесплатные загрузки)
Загрузите наше бесплатное руководство по Microsoft Word VBA! Или учебники VBA для других программ Office!
Скачать
Ниже вы найдете простые примеры кода VBA для работы с Microsoft Word.
Выбрать / перейти к
ОписаниеКод VBABackspaceSelection.TypeBackspaceВыбрать весь документSelection.HomeKey Unit: = wdStory
Selection.ExtendКопироватьSelection.CopyУдалитьSelection.Delete Unit: = wdCharacter, Count: = 1Вставить послеSelection.InsertAfter «текст»Начало строкиSelection.HomeKey Unit: = wdLineКонец линииSelection.EndKey Unit: = wdLineВставитьSelection.PasteВыбрать всеSelection.WholeStoryВыбрать всю строкуSelection.EndKey Unit: = wdLine, Extend: = wdExtendВверх по абзацуSelection.MoveUp Unit: = wdParagraph, Count: = 1Переместить вправо на один символSelection.MoveRight Unit: = wdCharacter, Count: = 1Переместить вправо на одну ячейку в таблицеSelection.MoveRight Unit: = wdCellПерейти к началу документаSelection.HomeKey Unit: = wdStoryПерейти в конец документаSelection.EndKey Unit: = wdStoryПерейти на страницу 1Selection.GoTo What: = wdGoToPage, Which: = wdGoToNext, Name: = ”1 ″Перейти к началу страницыSelection.GoTo What: = wdGoToBookmark, Name: = ” Page”
Selection.MoveLeft Unit: = wdCharacter, Count: = 1
Return to Top
Закладки
ОписаниеКод VBAДобавлятьС ActiveDocument.Bookmarks
.Add Range: = Selection.Range, Name: = «Name».
.DefaultSorting = wdSortByName
.ShowHidden = Ложь
Конец сСчитатьDim n as Integer
n = ActiveDocument.Bookmarks.CountУдалитьActiveDocument.Bookmarks («Имя закладки»). УдалитьСуществуют?Если ActiveDocument.Bookmarks.Exists («BookmarkName») = True, то
‘Сделай что-нибудь
Конец, еслиПерейти кSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”ВыбиратьActiveDocument.Bookmarks («Имя закладки»). ВыберитеЗаменить текстSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”
Selection.Delete Unit: = wdCharacter, Count: = 1
Selection.InsertAfter «Новый текст»
ActiveDocument.Bookmarks.Add Range: = Selection.Range, _
Name: = ”BookmarkName”
Return to Top
Документ
ОписаниеКод VBAАктивироватьДокументы («Example.doc»). АктивироватьДобавить в переменнуюDim doc As Document
Установить doc = Documents.AddДобавлятьDocuments.AddДобавить (из другого документа)Documents.Add Template: = ”C: Forms FormDoc.doc”, _
NewTemplate: = FalseЗакрыватьДокументы («Example.doc»). ЗакрытьЗакрыть — сохранить измененияДокументы («Example.doc»). Закройте SaveChanges: = wdSaveChangesЗакрыть — не сохранятьДокументы («Example.doc»). Закройте SaveChanges: = wdDoNotSaveChanges.Закрыть — запрос на сохранениеДокументы («Example.doc»). Закройте SaveChanges: = wdPromptToSaveChanges.
Return to Top
Столбцы
ОписаниеКод VBAСохранить какДокументы («Example.doc»). SaveAs («C: Example Example.doc»)СохранитьДокументы («Example.doc»). СохранитьЗащищатьДокументы («Example.doc»). Защитить пароль: = «пароль»Снять защитуДокументы («Example.doc»). Снять пароль: = «пароль»Число страницDim varNumberPages как вариант
varNumberPages = _
ActiveDocument.Content.Information (wdActiveEndAdjustedPageNumber)РаспечататьДокументы («Example.doc»). Распечатать
Return to Top
Устали искать примеры кода VBA? Попробуйте AutoMacro!
Шрифт
ОписаниеКод VBAРазмерSelection.Font.Size = 12ЖирныйSelection.Font.Bold = TrueКурсивSelection.Font.Italic = TrueПодчеркиваниеSelection.Font.Underline = wdUnderlineSingleВсе заглавные буквыSelection.Font.AllCaps = TrueЦветSelection.Font.TextColor = vbRedИмяSelection.Font.Name = «Абади»Нижний индексSelection.Font.Subscript = TrueSuperScriptSelection.Font.Superscript = TrueЦвет выделенияSelection.Range.HighlightColorIndex = wdYellowСтильSelection.Style = ActiveDocument.Styles («Нормальный»)
Return to Top
Вставлять
ОписаниеКод VBAВставить автотекстSelection.TypeText Текст: = ”a3 ″
Selection.Range.InsertAutoTextВставить код датыВставить файлSelection.InsertFile («C: Docs Something.doc»)Вставить разрыв страницыSelection.InsertBreak Тип: = wdPageBreakВставить символ абзацаSelection.TypeText Text: = Chr $ (182)Вставить вкладкуSelection.TypeText Текст: = vbTabВставить текстSelection.TypeText Text: = «Любой текст»Вставить абзац типаSelection.TypeParagraphВставить абзацSelection.InsertParagraph
Return to Top
Петли
ОписаниеКод VBAСделать до конца документаСделать до ActiveDocument.Bookmarks (« Sel») = ActiveDocument.Bookmarks (« EndOfDoc»)
‘Сделай что-нибудь
SubДля каждого документа в ДокументахDim doc As Document
Для каждого документа в документах
‘Сделай что-нибудь
Следующий документЦикл по абзацамПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я
Return to Top
Пункт
ОписаниеКод VBAKeepLinesTogetherSelection.ParagraphFormat.KeepTogether = TrueKeepWithNextSelection.ParagraphFormat.KeepWithNext = ИстинаПробел послеSelection.ParagraphFormat.SpaceAfter = 12Пространство доSelection.ParagraphFormat.SpaceBefore = 0Выровнять по центруSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterВыровнять по правому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphRightВыровнять по левому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphLeftЛевый отступSelection.ParagraphFormat.LeftIndent = InchesToPoints (3,75)Правый отступSelection.ParagraphFormat.RightIndent = InchesToPoints (1)Межстрочный интервалС Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
Конец сПеребрать все абзацыПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я
Return to Top
Учебное пособие по макросам Word VBA
Это руководство по использованию VBA с Microsoft Word. Это руководство научит вас писать простой макрос и взаимодействовать с документами, диапазонами, выделениями и абзацами.
Примечание. Если вы новичок в Macros / VBA, вам также может быть полезна эта статья: Как писать макросы VBA с нуля.
VBA — это язык программирования, используемый для автоматизации программ Microsoft Office, включая Word, Excel, Outlook, PowerPoint и Access.
Макросы представляют собой блоки кода VBA, которые выполняют определенные задачи.
Когда ты Записать макрос, Word запишет код VBA в макрос, что позволит вам повторять ваши действия. Вы можете увидеть список всех доступных макросов из Просмотр> Макросы.
После записи макроса вы сможете редактировать макрос из списка макросов:
Когда вы нажимаете Редактировать, вы открываете Редактор VBA. Используя редактор VBA, вы можете редактировать записанные макросы или писать макрос Word с нуля. Для доступа к редактору VBA используйте ярлык ALT + F11 или щелкните Visual Basic от Лента разработчика.
Пример простого макроса Word
Это простой пример макроса Word VBA. Он выполняет следующие задачи:
- Открывает документ Word
- Записывает в документ
- Закрывает и сохраняет документ Word.
123456789101112131415 | Sub WordMacroExample ()’Открыть документ и назначить переменнойDim oDoc как документУстановите oDoc = Documents.Open («c: Users something NewDocument.docx»).’Написать в документSelection.TypeText «www.automateexcel.com»Selection.TypeParagraph’Сохранить и закрыть документoDoc.SaveoDoc.CloseКонец подписки |
Основы работы с макросами Word
Весь код VBA должен храниться в подобных процедурах. Чтобы создать процедуру в VBA, введите «Sub WordMacroExample» (где «WordMacroExample» — желаемое имя макроса) и нажмите ВХОДИТЬ. VBA автоматически добавит круглые скобки и End Sub.
Объект документа Word
При взаимодействии с Microsoft Word в VBA вы часто будете ссылаться на Word «Объекты». Наиболее распространенные объекты:
Объект приложения — сам Microsoft Word
Объект документа — документ Word
Объект диапазона — Часть документа Word
Объект выделения — Выбранный диапазон или положение курсора.
заявка
Приложение — это объект «верхнего уровня». Через него можно получить доступ ко всем остальным объектам Word.
Помимо доступа к другим объектам Word, можно применить настройки «уровня приложения»:
1 | Application.Options.AllowDragAndDrop = True |
Это пример доступа к «Выборке» в «Windows (1)» в Приложении:
1 | Application.Windows (1) .Selection.Characters.Count |
Однако к наиболее распространенным объектам Word можно получить доступ напрямую, без ввода полной иерархии. Поэтому вместо этого вы можете (и должны) просто ввести:
1 | Selection.Characters.Count |
Документы
ActiveDocument
Часто у вас есть два или более документов, открытых в Word, и вам нужно указать, с каким конкретным документом Word следует взаимодействовать. Один из способов указать, какой документ использовать ActiveDocument. Например:
1 | ActiveDocument.PrintOut |
… Напечатал бы ActiveDocument. ActiveDocument — это документ в Word, который «имеет фокус»
Чтобы переключить ActiveDocument, используйте команду Activate:
1 | Документы («Example.docx»). Активировать |
Этот документ
Вместо использования ActiveDocument для ссылки на активный документ вы можете использовать ThisDocument для ссылки на документ, в котором хранится макрос. Этот документ никогда не изменится.
Переменные документа
Однако для более сложных макросов может быть сложно отслеживать активный документ. Также может быть неприятно переключаться между документами.
Вместо этого вы можете использовать переменные документа.
Этот макрос назначит ActiveDocument переменной, а затем распечатает документ, используя переменную:
12345 | Sub VarExample ()Dim oDoc как документУстановите oDoc = ActiveDocumentoDoc.PrintOutКонец подписки |
Документ Методы
Открыть документ
Чтобы открыть документ Word:
1 | Documents.Open «c: Users SomeOne Desktop Test PM.docx» |
Мы рекомендуем всегда назначать документ переменной при его открытии:
12 | Dim oDoc как документУстановите oDoc = Documents.Open («c: Users SomeOne Desktop Test PM.docx»). |
Создать новый документ
Чтобы создать новый документ Word:
Мы можем указать Word создать новый документ на основе некоторого шаблона:
1 | Documents.Add Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx» |
Как всегда, присвоение документа переменной при создании или открытии помогает избавить от серьезных проблем:
12 | Dim oDoc как документУстановите oDoc = Documents.Add (Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx») |
Сохранить документ
Чтобы сохранить документ:
или Сохранить как:
1 | ActiveDocument.SaveAs FileName: = c: Users SomeOne Desktop test2.docx «, FileFormat: = wdFormatDocument |
Закрыть документ
Чтобы закрыть документ и сохранить изменения:
1 | ActiveDocument.Close wdSaveChanges |
или без сохранения изменений:
1 | ActiveDocument.Close wdDoNotSaveChanges |
Распечатать документ
Это напечатает активный документ:
1 | ActiveDocument.PrintOut |
Диапазон, выделение, абзацы
Диапазон а также Выбор являются, вероятно, наиболее важными объектами в Word VBA и, безусловно, наиболее часто используемыми.
Диапазон относится к некоторой части документа, обычно, но не обязательно, к тексту.
Выбор относится к выделенному тексту (или другому объекту, например изображениям) или, если ничего не выделено, к точке вставки.
Абзацы представляют абзацы в документе. Это менее важно, чем кажется, потому что у вас нет прямого доступа к тексту абзаца (вам нужно получить доступ к определенному диапазону абзацев, чтобы внести изменения).
Диапазон
Диапазон может быть любой частью документа, включая весь документ:
12 | Dim oRange As RangeУстановите oRange = ActiveDocument.Content |
или он может быть маленьким, как один символ.
Другой пример, этот диапазон будет относиться к первому слову в документе:
12 | Dim oRange As RangeУстановите oRange = ActiveDocument.Range.Words (1) |
Обычно вам нужно получить диапазон, который относится к определенной части документа, а затем изменить его.
В следующем примере мы выделим первое слово второго абзаца жирным шрифтом:
123 | Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Bold = True |
Установить текст диапазона
Чтобы установить текстовое значение диапазона:
123 | Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Text = «Привет» |
(Совет: обратите внимание на пробел после «Hello». Поскольку слово «объект» включает пробел после слова, просто «hello» мы получим «Hellonext word»)
С диапазонами можно делать сотни вещей. Всего несколько примеров (предполагается, что вы уже сделали объектную переменную апельсин относится к интересующему диапазону):
Изменить шрифт
1 | oRange.Font.Name = «Arial» |
Отображение в окне сообщения количества символов в определенном диапазоне
1 | MsgBox oRange.Characters.Count |
Вставьте текст перед ним
1 | oRange.InsertBefore «это вставленный текст» |
Добавить сноску к диапазону
12 | ActiveDocument.Footnotes.Add Диапазон: = oRange, _Text: = «Подробнее читайте на easyexcel.net.» |
Скопируйте в буфер обмена
1234 | oRange.CopyЧасто вам нужно перейти к конкретному диапазону. Итак, вы можете начать, начать и закончитьoRange.Start = 5oRange.End = 50 |
После приведенного выше кода oRange будет относиться к тексту, начинающемуся с пятого и заканчивающемуся 50-м символом в документе.
Выбор
Выбор используется даже шире, чем Диапазон, потому что с ним легче работать Выборы чем Диапазоны, ЕСЛИ ваш макрос взаимодействует ТОЛЬКО с ActiveDocument.
Сначала выберите желаемую часть вашего документа. Например, выберите второй абзац в активном документе:
1 | ActiveDocument.Paragraphs (2) .Range.Select |
Затем вы можете использовать объект выбора для ввода текста:
1 | Selection.TypeText «Какой-то текст» |
Мы можем ввести несколько абзацев ниже «Некоторый текст»:
12 | Selection.TypeText «Какой-то текст»Selection.TypeParagraph |
Часто необходимо знать, выделен ли какой-то текст или у нас есть только точка вставки:
12345 | Если Selection.Type wdSelectionIP ТогдаSelection.Font.Bold = TrueЕщеMsgBox «Вам нужно выделить текст».Конец, если |
При работе с объектом Selection мы хотим поместить точку вставки в определенное место и запускать команды, начиная с этой точки.
Начало документа:
1 | Selection.HomeKey Unit: = wdStory, Extend: = wdMove |
Начало текущей строки:
1 | Selection.HomeKey Unit: = wdLine, Extend: = wdMove |
Параметр Extend wdMove перемещает точку вставки. Вместо этого вы можете использовать wdExtend, который выделит весь текст между текущей точкой вставки.
1 | Selection.HomeKey Unit: = wdLine, Extend: = wdExtend |
Переместить выделение
Самый полезный метод изменения положения точки вставки — «Перемещение». Чтобы переместить выделение на два символа вперед:
1 | Selection.Move Unit: = wdCharacter, Count: = 2 |
чтобы переместить его назад, используйте отрицательное число для параметра Count:
1 | Selection.Move Unit: = wdCharacter, Count: = — 2 |
Параметр единицы измерения может быть wdCharacter, wdWord, wdLine или другим (используйте справку Word VBA, чтобы увидеть другие).
Чтобы вместо этого переместить слова:
1 | Selection.Move unit: = wdWord, Count: = 2 |
С выделением легче работать (по сравнению с диапазонами), потому что он похож на робота, использующего Word, имитирующего человека. Где находится точка вставки — какое-то действие произойдет. Но это означает, что вы должны позаботиться о том, где находится точка вставки! Это непросто после многих шагов в коде. В противном случае Word изменит текст в нежелательном месте.
Если вам нужно какое-то свойство или метод, недоступный в объекте Selection, вы всегда можете легко получить диапазон, связанный с выбором:
1 | Установите oRange = Selection.Range. |
СОВЕТ: Использование Выбор часто проще, чем использование диапазонов, но также и медленнее (важно, когда вы имеете дело с большими документами)
Абзацы
Вы не можете напрямую использовать объект Paragraphs для изменения текста:
1 | ActiveDocument.Paragraphs (1) .Text = «Нет, это не сработает» |
Выше не сработает (на самом деле выдаст ошибку). Вам нужно сначала получить диапазон, связанный с конкретным абзацем:
1 | ActiveDocument.Paragraphs (1) .Range.Text = «Теперь работает :)» |
Но вы можете напрямую изменить его стиль:
1 | ActiveDocument.Paragraphs (1) .Style = «Нормальный» |
или измените форматирование на уровне абзаца:
1 | ActiveDocument.Paragraphs (1) .LeftIndent = 10 |
или, может быть, вы хотите сохранить этот абзац на одной строке со следующим абзацем:
1 | ActiveDocument.Paragraphs (1) .KeepWithNext = True |
Сделайте абзац по центру:
1 | ActiveDocument.Paragraphs (1) .Alignment = wdAlignParagraphCenter |
ОЧЕНЬ полезно назначить конкретный абзац объектной переменной. Если мы присвоим переменной конкретный абзац, нам не нужно беспокоиться, станет ли первый абзац вторым, потому что мы вставили перед ним один абзац:
12 | dim oPara как абзацУстановите oPara = Selection.Paragraphs (1) ‘здесь мы присваиваем первый абзац текущего выделения переменной |
Вот пример, в котором мы вставляем абзац над первым абзацем, но мы все еще можем ссылаться на старый первый абзац, потому что он был назначен переменной:
1234567 | Sub ParagraphExample ()Dim oPara как абзацУстановить oPara = ActiveDocument.Paragraphs (1)MsgBox oPara.Range.TextoPara.Range.InsertParagraphBefore ‘Вставить абзацMsgBox oPara.Range.TextКонец подписки |
Объект абзаца очень часто используется в циклах:
123456789101112 | Sub LoopThroughParagraphs ()Dim oPara как абзацДля каждого параметра в ActiveDocument.Paragraphs«Сделай что-нибудь с этим. Мы просто покажем’текст абзаца, если его стиль — «Заголовок 4″Если oPara.Style = «Заголовок 4», тоMsgBox oPara.Range.TextКонец, еслиДалее oParaКонец подписки |
Word VBA Tutorial Заключение
В этом руководстве были рассмотрены основы Word VBA. Если вы новичок в VBA, вам также следует ознакомиться с нашим общим руководством по VBA, чтобы узнать больше о переменных, циклах, окнах сообщений, настройках, условной логике и многом другом.
Примеры макросов Word
Примеры макросов Word |
---|
Шаблоны |
Добавить новые документы |
Подсчет слов в выделенном фрагменте |
Текстовые поля |
Сохранить как PDF |
Закладки |
Таблицы |
Найти, найти и заменить |
Открытые документы |
Word VBA: часто задаваемые вопросы
Что такое макрос Word?
Макрос — это общий термин, обозначающий набор инструкций по программированию, которые автоматизируют задачи. Макросы Word автоматизируют задачи в Word с помощью языка программирования VBA.
Есть ли в слове VBA?
Да, в Microsoft Word есть редактор VBA. Доступ к нему можно получить, нажав клавиши ALT + F11 или перейдя в раздел «Разработчик»> «Visual Basic».
Как использовать VBA в Word?
1. Откройте редактор VBA (ALT + F11 или Разработчик> Visual Basic).
2. Выберите «Вставить»> «Модуль», чтобы создать модуль кода.
3. Введите «Sub HelloWorld» и нажмите Enter.
4. Между строками «Sub HelloWorld» и «End Sub» введите «MsgBox« Hello World! »
5. Вы создали макрос!
6. Теперь нажмите «F5», чтобы запустить макрос.
Продолжение заметки о способах создания макросов.
Если у вас есть готовый код макроса, например, с этого сайта, то следующий совет поможет внедрить его в ваши документы. Есть две возможности создания макроса из готового кода.
Первый вариант: создание макроса с помощью диалогового окна Макрос
- В меню Сервис наведите указатель мыши на пункт Макрос и в раскрывшемся подменю выберите команду Макросы. Если вы работаете в Word 2007, то перейдите на вкладку Разработчик и в группе команд Код нажмите кнопку Макросы. Откроется диалоговое окно Макрос:
Это же диалоговое окно также можно открыть с помощью сочетания клавиш «Alt»+«F8».
- В поле Имя введите наименование для макроса.
- В поле Макросы из выберите строку Активных шаблонов. В этом случае созданный вами макрос будет доступен для всех документов, основанных на шаблоне Normal.dot.
- В поле Описание можете ввести краткую информацию о назначении макроса. Этот текст будет размещен в коде макроса в качестве комментария.
- Нажмите кнопку Создать. После этого Word запустит редактор Visual Basic, создаст модуль (если ранее он не был создан) NewMacros в шаблоне Normal.dot и добавит начальные строки подпрограммы и комментарий (шрифт зеленого цвета с апострофом перед текстом комментария), введенный вами в поле Описание:
- В то место, где находится курсор ввода (между комментариями и оператором End Sub, вставьте ваш код (скопированный без начальных операторов Sub и End Sub).
- Проверьте работоспособность макроса, нажав кнопку Run Sub на панели инструментов редактора Visual Basic или воспользуйтесь клавишей «F5».
- Назначьте данному макросу сочетание клавиш или поместите созданную для макроса кнопку на панель инструментов или добавьте кнопку на панель быстрого доступа (для Word 2007).
Второй вариант: создание макроса из готового кода
- Сохраните все документы, с которыми вы в настоящий момент работаете и создайте новый документ.
- Нажмите сочетание клавиш «Alt»+«F11». Откроется редактор Visual Basic с пустым (или уже содержащим какой-либо программный код ) окном.
- Вставьте в окно редактора скопированный код (если он существует в электронном виде) или наберите код макроса вручную, включая операторы начала процедуры Sub и конца процедуры End Sub.
- Проверьте работоспособность макроса, нажав кнопку Run Sub на панели инструментов редактора Visual Basic или воспользуйтесь клавишей «F5».
- Назначьте данному макросу сочетание клавиш или поместите созданную для макроса кнопку на панель инструментов или добавьте кнопку на панель быстрого доступа (для Word 2007).
В данной статье собраны основные операции и алгоритмы работы, позволяющие повысить эффективность разработки документации в редакторе Microsoft Word как индивидуально, так и при командной работе.
Несмотря на то что материала на подобную тематику написано достаточно, многие продолжают использовать компьютер на уровне печатной машинки не задумываясь о том, что половину рутинной работы можно переложить на тот самый Word.
В статье намеренно не рассматриваются подходы с использованием Markdown, Pandoc, Asciidoc, Confluence как более сложные и узкоспециализированные, а статью хотелось сделать доступной и понятной не только молодым людям, но и людям старших возрастов.
Все описанные действия выполнены в программе «Microsoft Word профессиональный плюс 2019». В предыдущих версиях Word последовательность и названия команд могут отличаться, но описанная функциональность так или иначе существует. По минимуму использованы макросы и автоматизация с помощью сторонних средств (в частности Python, использована версия 3.6).
Описанные операции
-
Автоматическая нумерация рисунков (таблиц)
-
Ускоренная вставка поля автоматической нумерации рисунка
-
Ссылка на номер рисунка (таблицы, разделы, пункты)
-
Изменение формата перекрестной ссылки на рисунок (таблицу, раздел, пункт)
-
Ускоренная вставка ссылки на номер рисунка (таблицы)
-
Автозаполняемые поля (Экспресс-блоки) (число страниц, дата)
-
Исправление съезжающей нумерации в списке при выборе «Начать заново с 1»
-
Карта стилей
-
Перенос стилей между документами и очистка стилей
-
Автоматическое содержание (оглавлениие)
-
Макрос. Обрамление выделенного текста двоеточием с обеих сторон
-
Сравнение документов
-
Python. Пакетное сохранение документов в PDF
-
Список сокращений
-
Горячие клавиши
-
Заключение
Автоматическая нумерация рисунков (таблиц)
Классическая проблема: нужно объединить 4 файла, насыщенные рисунками, в один документ. Если это делать «в лоб», после объединения нумерация рисунков собьется. Восстановить ее – большая грустная задача.
Классическое решение: поставить вместо номера рисунка текст «ХХ» и закрасить желтым цветом (желтый цвет предлагается Word по умолчанию для выделения текста). Потом, после объединения частей в один файл, руками проставить номера рисунков в порядке их очередности. Это первое, что делает нормальный человек, действуя интуитивно, и проблема не кажется сложной, пока вы не столкнетесь с документом, в котором рисунков больше сотни, и еще нужно поддерживать актуальность документа (то есть со временем добавлять или исключать рисунки с перекрестными ссылками).
Word умеет делать это автоматически, причем не только для рисунков, а еще и для таблиц, параграфов, разделов, абзацев и др.
Чтобы присвоить рисунку (таблице) номер в автоматическом режиме, нужно нажать непосредственно на рисунок (1), после чего выбрать пункт меню «Ссылки» (2) ⟶ «Вставить название» (3) ⟶ Снять галочку «Исключить подпись из названия» (4) ⟶ «Ок» (5). Под рисунком появится подпись «Рисунок 1», где 1 – это поле автоматической нумерации рисунка (таблицы) (6). Справа от номера, в зависимости от правил именования рисунков, рисунку можно дать название.
Суть данной операции в том, что если 4 человека форматировали наименования рисунков именно так, то после объединения четырех частей документа для проставления корректных номеров рисунков необходимо выделить весь текст документа (Ctrl+A) и обновить автоматические поля (F9). Все рисунки (таблицы) при этом получат правильный порядковый номер (3).
Думаете, что повторить данную процедуру для 1000 рисунков долго? Читаем ниже.
Ускоренная вставка поля автоматической нумерации рисунка (таблицы)
Для быстрой вставки поля автоматического номера рисунка (таблицы) необходимо выделить любое сформированное ранее название рисунка (таблицы) (см. пункт выше), содержащее поле автоматической нумерации (1), скопировать его, перевести курсор под нужный рисунок и вставить скопированное название (2). Название будет скопировано с полем автоматической нумерации с исходным номером. Его нужно будет обновить. Не обязательно делать это сразу. Пока скопированный текст находится в буфере обмена, можно вставить поле автоматической нумерации под всеми рисунками (таблицами) до конца документа, после чего выделить весь текст (Ctrl+A) и обновить автоматические поля (F9). Все рисунки (таблицы) при этом получат правильный порядковый номер (3).
Это, пожалуй, самый простой способ, которым можно быстро привести в порядок документ, изначально разработанный не Вами, насыщенный рисунками, состав которых необходимо изменить.
Ссылка на номер рисунка (таблицы, раздела, пункта)
Классическая проблема: документ имеет много отсылок на внутренние объекты документа (рисунки, таблицы, разделы, пункты). При изменении номера объекта надо изменить и все отсылки на него, а если они находятся не рядом с объектом, то про них можно просто забыть или пропустить.
Классическое решение: сначала человек проставляет вместо номеров рисунков (объектов) «ХХ» желтым цветом, то же самое делает и для ссылок на указанные рисунки, затем проставляет номера рисунков по окончанию редактирования документа и начинает сопоставлять ссылки с рисунками, к которым они относятся.
Данный подход приходит в голову первым, однако Word и это умеет делать автоматически. Если в тексте встречаются ссылки на рисунки, то крайне полезно делать их именно ссылкой, а не вручную вписанным номером. Это позволяет отказаться от механической проверки актуальности ссылок, которые обязательно начнут сбиваться при малейшем редактировании документа, и переложить указанную работу исключительно на Word. Более того, при перестановке рисунка по тексту или же вставке новых рисунков ссылки обновляются в соответствии с обновленной нумерацией. Если вдруг ссылка дана на несуществующий объект, то вместо номера рисунка (таблицы) появится сообщение вида «Ошибка! Источник ссылки не найден.». Используя поиск, можно быстро отследить корректность всех перекрестных ссылок по фразе «Ошибка».
Для вставки ссылки на рисунок (таблицу) необходимо перевести курсор мыши в то место, где необходимо вставить ссылку (1), нажать пункт меню «Ссылки» (2), «Перекрестная ссылка» (3), выбрать из выпадающего списка тип ссылки «Рисунок» («Таблица» и т.д.) (4), из выпадающего списка выбрать то, на что вставить ссылку «Постоянная часть и номер» (5), выбрать нужный рисунок (таблицу и др.) (6), нажать кнопку «Вставить» (7). На месте (1) появится ссылка на выбранный рисунок (таблицу и др.).
Если стандартный формат вставки ссылки не подходит (например, необходимо выполнять требования ГОСТ), то можно выполнить другие действия, описанные ниже.
Изменение формата перекрестной ссылки на рисунок (таблицу, раздел, пункт)
По умолчанию Word вставляет фразу «Рисунок N», однако иногда необходимо вставить фразу вида «Рис. N» (или «см. рис. N»). Для этого из перекрестной ссылки необходимо забрать лишь номер, а остальное дописать руками.
Для отображения только номера объекта необходимо выделить поле ссылки (1) и нажать «SHIFT+F9», при этом откроется код ссылки (2), в него нужно дописать сочетание « # » и обязательно поставить в конце пробел (3). Чтобы увидеть номер рисунка (таблицы), необходимо обновить содержимое поля нажатием «F9» (4).
Если у Вас сложилось впечатление, что это слишком долго, то читаем ниже, как можно немного ускориться.
Ускоренная вставка ссылки на номер рисунка (таблицы)
Ускорить процесс вставки ссылок можно достаточно просто, следуя советам дедушки Сазерленда (методология Scrum), а именно: нужно выполнять одну простейшую операцию. Применительно к нашей задаче следует выделить весь текст нажатием «Ctrl+A», отобразить коды автозаполняемых полей нажатием «SHIFT+F9», открыть окно «Перекрестные ссылки» по примеру выше, после чего необходимо пролистывать документ, перенося курсор в нужные места, выбирать нужные ссылки из открытого окна перекрестных ссылок и вставлять их. Окно «Перекрестные ссылки» закрываем только тогда, когда документ отработан до конца.
По аналогии можно быстро изменить отображение перекрестных ссылок на рисунки (таблицы). Для этого выделяем весь текст нажатием «Ctrl+A», отображаем коды автозаполняемых полей нажатием «SHIFT+F9», копируем в буфер обмена текст « # » (пробел в конце обязателен) и вставляем его в конце требуемых полей. Обновляем поля нажатием «F9», когда документ обработан до конца.
Автозаполняемые поля (Экспресс-блоки) (число страниц, дата)
Классическая ошибка: этап проекта перешел на новый год, вы внесли в документ необходимые правки, закрыли документ, но забыли обновить год или число страниц на титульном листе и отправили заказчику.
Классическое решение: вы не забываете обновить год и число страниц и по завершении редактирования документа листаете его до конца, чтобы Word корректно пересчитал число страниц с учетом форматирования, возвращаетесь на титульный лист и вставляете полученное число.
Все это может выполняться автоматически стандартными средствами Word. В качестве примера вставим автоматическое поле числа страниц документа. Для этого устанавливаем курсор мыши туда, где необходимо вставить автозаполняемое поле (1), выбираем пункт меню «Вставить», затем «Экспресс-блоки» (2), затем «Поле» (3). Откроется окно «Поле» (4), в колонке «Поля» выбираем тип поля, в нашем примере «NumPages» (5), и нажимаем кнопку «Ок» (6). При этом в месте, где был установлен курсор (1), вставится поле, которое при обновлении (F9) поменяет значение на фактическое число страниц.
Для вставки даты вместо «NumPages» (5) необходимо найти «Date» и выбрать необходимый формат.
Исправление съезжающей нумерации в списке при выборе «Начать заново с 1»
Классическая проблема: надо начать новый нумерованный список, но по умолчанию продолжается старая нумерация. Обычно делают так: нажимают «ПКМ», «Начать заново с 1» и первый номер съезжает к значению по умолчанию.
Классическое решение: каждый раз передвигать отступы первого пункта списка на необходимое место.
Этого можно не делать если заранее определить отступы для нумерованного списка. Для этого необходимо нажать на первый номер нумерованного списка «ПКМ», затем «Изменить отступы в списке». Проделать это можно сразу для нескольких уровней списков, а еще лучше, если для каждого уровня списка создать отдельный стиль, что позволит быстро изменять отступы по всему документу, но об этом уже ниже.
Карта стилей
Классическая проблема: два человека разрабатывают части документа, в которых используется нумерация разделов и пунктов, выделение заголовков и особое форматирование абзацев. Один человек поддерживал нумерацию механически, второй — используя автонумерацию. При объединении нумерация съезжает, равно как и форматирование.
Классическое решение: выбирается жертва, которая приводит полученный бардак к единому виду.
Это, пожалуй, самая распространенная проблема, которая влечет за собой много нудной, монотонной и неинтересной работы по форматированию документа. Возникает она по причине того, что мало кто знает и пользуется одной из базовых возможностей Word — стилями. Правильно подготовленная карта стилей позволяет экономить уйму времени. Вы знали, что при изменении параметров существующего стиля они применяются ко всему тексту документа, который отформатирован в этом стиле?
Так вот, чтобы форматирование не занимало слишком много времени, хорошей практикой считается перед началом проекта уяснить требования к оформлению документов (например, определенных в ГОСТ или шаблонах заказчика) и собрать карту стилей хотя бы для следующих элементов:
-
Заголовок 1,2,3,4,5,6 уровней;
-
Текст;
-
Нумерованный список;
-
Список;
-
Название таблицы;
-
Текст таблицы;
-
Название рисунка;
-
Рисунок;
-
Программный код.
Шаблон документа с указанными стилями раздается всем членам команды, а еще лучше сохраняется в корпоративном облаке или Confluence.
При таком подходе вставка новых материалов в документ не нарушает целостность форматирования.
Перенос стилей между документами и очистка стилей
Классическая проблема: вы отдаете документ на проверку по отделам организации. И один из сотрудников вносит свои правки в Libre в Ubuntu, а другой делает то же самое, но используя Mac. Потом документы возвращаются к вам, вы обнаруживаете в них 10000 стилей, текст в непонятных шрифтах и нарушение исходного форматирования.
Классическое решение (взято из интернета): нажимаем галочку в правом нижнем углу раздела «Стили» (или «Ctrl» + «Shift» + «Alt» + «S»), затем «Очистить стили».
Проблема такого подхода в том, что сами стили не удаляются из документа. Происходит сброс примененного форматирования текста, а оставшиеся стили в списке стилей мешают нормально форматировать документ. Очистить документ от мусора в виде тысяч стилей можно, однако автоматически присвоить необходимые стили абзацам не получится (тут уже в ход необходимо пускать Markdown и прочие подходы к разработке документации).
Документ в формате *.docx — это самый обыкновенный архив, который спокойно открывается архиватором (например, WinRAR).
Чтобы открыть документ в WinRAR открываем непосредственно сам архиватор, находим искомый документ, нажимаем правой клавишей мыши и выбираем «Показать содержимое архива». Нам откроется структура папок вида: _rels, customXml, docProps, word. В большей степени нас интересует каталог «Word». Переходим в него. За стили в документе отвечает файл «styles.xml».
Чтобы перенести стили из исходного шаблона документа в требуемый, достаточно заменить файл со стилями в требуемом документе аналогичным файлом из исходного шаблона документа. В требуемом документе стили будут сброшены до тех, что были созданы в шаблоне, зато появится возможность не настраивать карту стилей заново.
Если же есть острое желание очистить документ от всех стилей, файл «styles.xml» нужно удалить.
Если совсем не хочется открывать документ в WinRar, вот скрипт (для Windows):
@ECHO OFF
SET Winrar=C:Program FilesWinRARWinRAR.exe
FOR %%I IN (*.docx) DO (
"%WinRAR%" d "%%I" wordstyles.xml
)
Открываем блокнот, вставляем туда указанный текст и сохраняем в формате *.bat. Переносим полученный файл в каталог с документами, в которых необходимо удалить стили и запускаем.
По-хорошему, чтобы не доводить до подобного, лучше сравнивать документы на предмет выявления правок, и переносить их вручную в документ с нормальным форматированием. Еще лучше – отдавать документ на вычитку в формате *.pdf, чтобы не нарушать правило, что изменения в документ вносит только ответственный за документацию.
Автоматическое содержание (оглавление)
Классическая проблема: Вы работаете над документом размером, например, в 300 страниц. По завершении листаете документ и собираете содержание, проставляете номера страниц. Срочно возникает необходимость вставить в текст новый раздел.
Классическое решение: вставляете необходимый текст, актуализируете нумерацию разделов и всего, что должно быть пронумеровано, актуализируете содержание, заново листаете документ и проставляете новые номера страниц заголовков разделов.
Подход в целом обычный, но зачем проходить такой долгий путь, если можно его избежать. Автособираемое оглавление – стандартная функция Word. По своей сути это еще одно автозаполняемое поле, но с некоторыми нюансами. Оно позволяет переносить из документа абзацы, отформатированные специальным образом, в содержание и автоматически указывать номер страницы, на которой этот абзац расположен.
Делается это достаточно просто, особенно при наличии преднастроенных стилей для заголовков. Если же таких стилей нет, то нужно немного изменить параметры абзаца (а лучше сразу стиля).
Предположим, что у нас есть текст (1). Выделяем в нем нужный заголовок (для нашего примера сразу все), который можно отнести к заголовку первого уровня, и заходим в настройки абзаца (2). Для выбранных абзацев в выпадающем списке «Уровень» (3) выбираем «Уровень 1» и нажимаем «Ок» (4). То же самое проделываем для всех оставшихся абзацев, присваивая им соответствующий уровень.
После того как уровни заголовков проставлены, переходим в пункт меню «Ссылки» (1), «Оглавление» (2), «Настраиваемое оглавление» (3). Здесь в окне «Параметры» (4) можно выполнить более точную настройку параметров содержания или включить в него стили, которым не были заданы уровни. По умолчанию достаточно указать число уровней, которые должны быть перенесены в содержание, нажать «Ок» и посмотреть, все ли, что Вы хотели, оказалось в содержании.
После завершения работы с документом обновление содержание осуществляется, как и любое другое автозаполняемое поле. Необходимо выделить его и нажать «F9». Однако при работе с содержанием будет предложено два варианта: «Полностью» и «Только номера страниц». При выборе параметра «Полностью» форматирование будет сброшено и надо будет править его заново. При обновлении только номеров страниц форматирование не съезжает и выполняется только пересчет страниц.
Макрос. Обрамление выделенного текста двоеточием с обеих сторон
Классическая проблема: в начале проекта не до конца утверждена терминология. Названия изделий, ряд сокращений и прочее выполнено в виде обычного текста, а заказчик требует выделить все эти элементы кавычками.
Классическое решение: открываете все документы один за одним и читаете. Все, на чем сделан акцент, выделяете кавычками.
Выделить одно слово кавычками не выглядит чем-то сложным, однако если вы работали в какой-нибудь IDE, то скорее всего знаете, насколько удобнее, когда ставится сразу две кавычки (открывающая и закрывающая). Аналога подобной функции в Word мне найти не удалось, зато встроенный инструментарий работы с макросами позволяет это реализовать. А чтобы полученный макрос можно было быстро применять, нужно назначить ему горячую клавишу.
Если изначально написать макрос кодом, моя сборка Word не позволяет назначить ему горячую клавишу. Это можно обойти следующим образом: переходим в пункт меню «Вид» (1), «Макросы» (2), «Запись макроса». Откроется окно «Запись макроса», где нужно ввести имя макроса и назначить его клавишам (4). Откроется окно «Настройка клавиатуры» (5), где нужно задать сочетание клавиш для выполнения макроса (например «Ctrl+2», так как кавычки задаются смежным сочетанием «Shift+2») (6), нажать «Назначить» (7) и «Закрыть» (8). Начнется запись макроса. Ее нужно остановить, для чего заходим в меню «Макросы» (2) и нажимаем «Остановить запись».
Теперь в созданный пустой макрос необходимо добавить код. Для этого переходим в «Макросы» (2), выбираем наш макрос из списка и нажимаем «Изменить». Откроется окно редактирования Visual Basic, содержимое которого необходимо заменить кодом ниже.
Sub Кавычки
'
'Кавычки макрос
'
'
If Right(Selection.Text, 1) = Chr(32) Or _
Right(Selection.Text, 1) = Chr(13) Then
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
With Selection
.InsertBefore Chr(171) 'вместо Char(171) можно использовать '('
.InsertAfter Chr(187) 'вместо Char(171) можно использовать ')'
End With
End Sub
Теперь при выделении текста и нажатии «Ctrl+2» он будет обрамлен кавычками с обеих сторон.
Сравнение документов
Классическая проблема: вы отдали документ на проверку и вам внесли в него правки. Вы не знаете, что было изменено, так как коллега поленился включить режим записи исправлений или хотя бы выделить их цветом.
Классическое решение: узнаете у человека, что он исправил, или же открываете два окна со старым и новым документ и начинаете сравнение.
Если вы не пользуетесь программами контроля версий (SVN) вроде GIT, где изменения можно просмотреть в логах, то Word аналогично может подсветить различия двух документов.
Для этого необходимо нажать пункт меню «Рецензирование» (1), «Сравнить» (2), выбрать исходный файл (3), измененный файл (4) и нажать «ОК» (5).
Откроется новое окно Word, в котором в виде комментариев и правок будут доступны все изменения между двумя документами.
Python. Пакетное сохранение документов в PDF
Классическая проблема: передаете комплект документов, а при открытии форматирование начинает съезжать, потому что не хватило шрифтов или еще чего-то.
Классическое решение: передавать документы в формате *.pdf. Для этого вы открываете сначала один документ, нажимаете «Сохранить как», выбираете тип файла «PDF», сохраняете. И так с каждым документом.
Данную процедуру можно автоматизировать с помощью Python, и запуском одного скрипта сохранить пакет документов в формате *.pdf.
Устанавливаем Python, открываем блокнот и вставляем в него следующий код:
import sys
import os
import comtypes.client
def decode_doc_to_pdf(filename):
wdFormatPDF = 17
in_file = os.path.abspath(filename+'.docx')
out_file = os.path.abspath(filename+'.pdf')
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(in_file)
doc.SaveAs(out_file, FileFormat=wdFormatPDF)
doc.Close()
word.Quit()
def get_list_of_docx_files():
list_of_all_files = os.listdir('.')
list_of_docx_files = []
for filename in list_of_all_files:
if filename[-4:] == 'docx':
list_of_docx_files.append(filename[:-5])
return list_of_docx_files
docx_list = get_list_of_docx_files()
for filename in docx_list:
decode_doc_to_pdf(filename)
Сохраняем документ с расширением *.py. Все что нужно сделать дальше, это положить скрипт в папку с документами в формате *.docx и запустить его. Если запуск исполняемого файла скрипта не проходит, то выполнить скрипт через командную строку.
Список сокращений
Классическая проблема: необходимо сформировать актуальный список сокращений, использованных в документе.
Классическое решение: читаем весь документ от начала до конца, выписываем все сокращения в отдельном файле, перечитываем документ сначала на предмет корректного применения сокращения (проверяем, что сокращение не используется раньше, чем оно введено)
Подобный процесс можно упростить. Подход не совершенный, так как программно отличить слово в верхнем регистре от сокращения без использования словаря невозможно, а делать подобное макросом в Word — бессмысленно.
Чтобы не нарушать форматирование в основном документе, необходимо сделать его копию. В копии исходного документа необходимо сбросить все форматирование, так как
будет необходимо использовать поиск с подстановочными знаками. Далее нажимаем «Заменить» (1), затем в поле «Найти» (2) вставляем текст « <[А-Я,A-Z]@> » (« <[А-Я]@> » для поиска только русских слов в верхнем регистре). Устанавливаем чекбокс «Подстановочные знаки» (3), нажимаем «Формат» (4), выбираем «Шрифт», затем «Полужирный» и нажимаем «Ок». В строке «Заменить на» (5) появится текст « ^& », после чего нажимаем «Заменить все» (6). Все слова в верхнем регистре будут выделены полужирным шрифтом.
Далее необходимо выделить весь найденный текст в верхнем регистре. Для этого выделяем любое сокращение, отформатированное жирным, нажимаем «Выделить», затем «Выделить текст, имеющий такой же формат». Копируем выделенный текст в буфер обмена (Ctrl+C).
Отсеять слова в верхнем регистре от сокращений и дубликатов можно используя Excel. Если не знакомы с такой процедурой, то открываем Excel, вставляем скопированный текст из буфера обмена в левую верхнюю ячейку. Чтобы удалить дубликаты из получившейся колонки, выделяем ее, переходим на вкладку «Данные» и нажимаем кнопку «Удалить дубликаты».
Появится сообщение вида «Найдено и удалено….осталось». Далее с полученным списком нужно немного поработать руками.
Горячие клавиши
Нельзя было опустить в подобной статье тему горячих клавиш. Учитывая, что есть много достойных статей, как например на официальном сайте Microsoft или же уже готовая шпаргалка, из общего списка горячих клавиш можно лишь выделить минимальный набор часто используемых сочетаний.
Выравнивание
-
CTRL+E — Переключение абзаца между выравниванием по центру и выравниванием по левому краю;
-
CTRL+J — Переключение абзаца между выравниванием по ширине и выравниванием по левому краю;
-
CTRL+R — Переключение абзаца между выравниванием по правому краю и выравниванием по левому краю;
-
CTRL+L — Выравнивание абзаца по левому краю.
Перемещение курсора
-
CTRL+СТРЕЛКА ВЛЕВО — На одно слово влево;
-
CTRL+СТРЕЛКА ВПРАВО — На одно слово вправо;
-
CTRL+СТРЕЛКА ВВЕРХ — На один абзац вверх;
-
CTRL+СТРЕЛКА ВНИЗ — На один абзац вниз.
Удаление слова
-
CTRL+BACKSPACE — Удаление одного слова слева от курсора;
-
CTRL+DEL — Удаление одного слова справа от курсора.
Начертание текста
-
CTRL+B — Добавление полужирного начертания;
-
CTRL+I — Добавление курсивного начертания;
-
CTRL+U — Добавление подчеркивания;
-
CTRL+[ — Уменьшение размера шрифта на 1 пункт;
-
CTRL+] — Увеличение размера шрифта на один пункт;
-
CTRL+SHIFT+> — Увеличение размера шрифта;
-
CTRL+SHIFT+< — Уменьшение размера шрифта.
Прописные буквы
-
SHIFT+F3 — Изменение регистра букв.
Прочее полезное
-
F4 – повтор последнего действия;
-
Alt + двойной клик в любом поле таблицы – выделить таблицу.
Заключение
Какими бы банальными не казались описанные выше операции, это — 90% косяков и ошибок в документах, связанных с оформлением, которые действительно трудно контролировать с ростом объема без четких правил командной работы. Все понимают причины таких ошибок, но не всегда знают, как с ними бороться.
Кто-то просто способен договориться внутри команды о подобных вещах и поделиться опытом, у кого-то подобные правила входят в СМК (Система менеджмента качества), у кого-то описано на уровне СТП (Стандарт предприятия).
Надеюсь, статья оказалась полезной и займет место в закладках не только технических писателей и аналитиков, но и специалистов других областей, которые значительную часть времени проводят в данном текстовом редакторе.
Содержание
- Области использования макросов:
- Включение макросов
- Запись макросов
- Изменение комбинаций клавиш для макроса
- Запуск макроса
- Создание нового макроса
- Вопросы и ответы
Макрос — это набор определенных действий, команд и/или инструкций, которые сгруппированы в одну целостную команду, обеспечивающую автоматическое выполнение той или иной задачи. Если вы активный пользователь MS Word, вы тоже можете автоматизировать часто выполняемые задачи, создав для них соответствующие макросы.
Именно о том, как включить макросы в Ворд, как их создавать и использовать для упрощения, ускорения рабочего процесса и пойдет речь в этой статье. И все же, для начала не лишним будет более подробно разобраться в том, зачем вообще они нужны.
Области использования макросов:
- 1. Ускорение часто выполняемых операций. В числе таковых форматирование и редактирование.
2. Объединение нескольких команд в целостное действие “от и до”. Например, с помощью макроса можно вставить таблицу заданного размера с необходимым количеством строк и столбцов.
3. Упрощение доступа к некоторым параметрам и инструментам, расположенным в различных диалоговых окнах программы.
4. Автоматизация сложных последовательностей действий.
Последовательность макросов может быть записана или создана с нуля путем введения кода в редактор Visual Basic на одноименном языке программирования.
Включение макросов
По умолчанию макросы доступны не во всех версиях MS Word, точнее, они просто не включены. Чтобы активировать их необходимо включить средства разработчика. После этого на панели управления программы появится вкладка “Разработчик”. О том, как это сделать, читайте ниже.
Примечание: В версиях программы, в которых макросы доступны изначально (например, Ворд 2016), средства для работы с ними находятся во вкладке “Вид” в группе “Макросы”.
1. Откройте меню “Файл” (кнопка “Microsoft Office” ранее).
2. Выберите пункт “Параметры” (ранее “Параметры Word”).
3. Откройте в окне “Параметры” категорию “Основные” и перейдите в группе “Основные параметры работы”.
4. Установите галочку напротив пункта “Показывать вкладку “Разработчик” на ленте”.
5. На панели управления появится вкладка “Разработчик”, в которой и будет находиться пункт “Макросы”.
Запись макросов
1. Во вкладке “Разработчик” или, в зависимости от используемой версии Ворда, во вкладке “Вид”, нажмите кнопку “Макросы” и выберите пункт “Запись макроса”.
2. Задайте имя для создаваемого макроса.
Примечание: Если вы, создавая новый макрос, даете ему точно такое же имя, как у встроенного в программу, действия, записанные вами в новый макрос, будут выполняться взамен стандартным. Для просмотра макросов, доступных в MS Word по умолчанию, в меню кнопки “Макросы” выберите “Команды Word”.
3. В пункте “Макрос доступен для” выберите то, для чего он будет доступен: шаблон или документ, в который его следует сохранить.
- Совет: Если вы хотите, чтобы создаваемый макрос был доступен во всех документах, с которыми вы работаете в дальнейшем, выберите параметр “Normal.dotm”.
4. В поле “Описание” введите описание для создаваемого макроса.
5. Выполните одно из действий, указанных ниже:
- Нажмите “кнопке”;
- Выберите документ или документы, в которых требуется добавить создаваемый макрос на панель быстрого доступа (раздел “Настройка панели быстрого доступа”);
- Совет: Чтобы создаваемый макрос был доступен для всех документов, выберите параметр “Normal.dotm”.
В окне “Макрос из” (ранее “Выбрать команды из”) выберите макрос, который следует записать, нажмите “Добавить”.
- Если вы хотите настроить эту кнопку, нажмите “Изменить”;
- Выберите подходящий символ для создаваемой кнопки в поле “Символ”;
- Введите имя макроса, которое будет отображаться в дальнейшем в поле “Отображаемое имя”;
- Для начала записи макроса дважды кликните по кнопке “ОК”.
Символ, который вы выбрали, будет отображаться на панели быстрого доступа. При наведении указателя курсора на этот символ, будет отображаться его имя.
- Кликните по кнопке “Клавишами” (ранее “Клавиатура”);
- В разделе “Команды” выберите макрос, который необходимо записать;
- В разделе “Новое сочетание клавиш” введите любую удобную для вас комбинацию, после чего нажмите кнопку “Назначить”;
- Для начала записи макроса нажмите “Закрыть”.
6. Выполните поочередно все те действия, которые необходимо включить в макрос.
Примечание: Во время записи макроса нельзя использовать мышь для выделения текста, а вот для выбора команд и параметров нужно использовать именно ее. При необходимости, выделить текст можно с помощью клавиатуры.
Урок: Горячие клавиши в Ворде
7. Для остановки записи макроса нажмите “Остановить запись”, эта команда расположена в меню кнопки “Макросы” на панели управления.
Изменение комбинаций клавиш для макроса
1. Откройте окно “Параметры” (меню “Файл” или кнопка “MS Office”).
2. Выберите пункт “Настройка”.
3. Нажмите на кнопку “Настройка”, расположенную рядом с полем “Сочетание клавиш”.
4. В разделе “Категории” выберите “Макросы”.
5. В открывшемся списке выберите макрос, который необходимо изменить.
6. Кликните по полю “Новое сочетание клавиш” и нажмите клавиши или комбинацию клавиш, которые вы хотите назначить для конкретного макроса.
7. Убедитесь, что назначенное вами сочетание клавиш не используется для выполнения другой задачи (поле “Текущее сочетание”).
8. В разделе “Сохранить изменения” выберите подходящий вариант (место) для сохранения места, где макрос будет запускаться.
- Совет: Если вы хотите, чтобы макрос был доступен к использованию во всех документах, выберите параметр “Normal.dotm”.
9. Нажмите “Закрыть”.
Запуск макроса
1. Нажмите на кнопку “Макросы” (вкладка “Вид” или “Разработчик”, в зависимости от используемой версии программы).
2. Выберите макрос, который хотите запустить (список “Имя макроса”).
3. Нажмите “Выполнить”.
Создание нового макроса
1. Нажмите кнопку “Макросы”.
2. Задайте имя для нового макроса в соответствующем поле.
3. В разделе “Макросы из” выберите шаблон или документ, для которого будет сохранен создаваемый макрос.
- Совет: Если вы хотите, чтобы макрос стал доступен во всех документах, выберите параметр “Normal.dotm”.
4. Нажмите “Создать”. Будет открыт редактор Visual Basic, в котором и можно будет создать новый макрос на языке Visual Basic.
На этом все, теперь вы знаете, что такое макросы в MS Word, зачем они нужны, как их создавать и как с ними работать. Надеемся, информация из этой статьи будет полезной для вас и действительно поможет упростить, ускорить работу со столь продвинутой офисной программой.