Image

Как автоматизировать подготовку отчетности в Word: макросы на практике

4c14acd3109cb7f41e9a41e1d4ae5c93

Всем привет! Я студент-работяга, который увлекается аналитикой в многогранном мире ИБ. Почти каждая задача (как аналитика, так и студента) так или иначе заканчивается подготовкой каких-то материалов: для аналитика — отчета, для студента — курсовой работы. В процессе подготовки этих материалов неизбежно сталкиваешься с рутиной из однообразных кликов (разметка текста, форматирование картинок и много другой скукоты). Однако справиться с ней можно, и сегодня я расскажу, как это сделать с помощью автоматизации в редакторе Word посредством VBA-макросов. Статья может быть полезна студентам и начинающим специалистам, но уверен, какие-то идеи пригодятся и тем, кто уже работает. Даже если вы не пользуетесь Microsoft Office, то все равно сможете почерпнуть для себя некоторые идеи, так как почти во всех пакетах есть поддержка языков программирования, например Basic в LibreOffice, Lua в пакете «МойОфис» или JavaScript в «Яндекс Документах». Кроме того, часть моих скриптов я выложил в открытый доступ: https://github.com/Bamboooo-mt.

Когда пишут про автоматизацию в Microsoft Office, то в большинстве случаев имеют в виду Excel, однако я сломаю шаблон и расскажу вам про автоматизацию в Word, которую часто незаслуженно обходят стороной.

Коротко о VBA-макросах

Макрос — это обычный скрипт, написанный на языке VisualBasic for Applications. В него можно заложить как одно действие, например изменение размера рисунков, так и массу различных действий. Например, один макрос может анализировать множество файлов и, основываясь на информации из них, строить таблицы и графики.

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

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

Реальные примеры

Давайте перейдем к практическим примерам. Я покажу несколько макросов (как сложных, так и совсем простых), которые сделал и которые помогли мне и моим друзьям избавиться от лишних действий и сократить количество ошибок. Ниже список скриптов, которые мы рассмотрим:

  • addShadow: для добавления теней на все рисунки

  • keepWithNext: чтобы строка не отрывалась от следующего абзаца

  • applyImageStyleAndCaption: для добавления подписей к рисункам, а также применения стилей к подписям и рисункам

  • deleteReadyComments: для удаления всех скрытых (разрешенных) примечаний

  • findRepeated: для поиска повторяющихся фраз в одном предложении

  • addFootnotesToHackTools: для добавления сносок со ссылками для всех хакерских инструментов в выделенной области

  • LinksToFootnotes: для превращения всех гиперссылок в выделенной области в сноски (сноска ставится на слово слева от гиперссылки)

  • CVEtoHyperlinks: для добавления гиперссылок на все CVE в отчете

  • maskingPass: для маскировки по паттерну паролей, хешей и другой чувствительной информации

  • replaceImagesFromFolder: для замены всех скриншотов на отредактированные из папки на основании подписи к скриншоту

Стоит отметить, что не все эти скрипты работают на macOS. Вдобавок расскажу вам про использование LLM через макросы и надстройку Word.

Простые макросы

addShadow

Для примера я воспользовался ChatGPT, но подойдет любой похожий чат-бот или локальная языковая модель. Вот как можно за один запрос создать простой макрос для наложения теней на все рисунки в документе.

Запрос:

Напиши макрос для MS Word, который поставит тени на все рисунки в документе. Обтекание текстом не меняй

Ответ (только VBA-код):

Sub AddShadowsToAllPictures() Dim shp As Shape Dim i As Long ‘ Обработка плавающих объектов (Shapes) For Each shp In ActiveDocument.Shapes If shp.Type = msoPicture Or shp.Type = msoLinkedPicture Then With shp.Shadow .Visible = msoTrue .ForeColor.RGB = RGB(0, 0, 0) ‘ Цвет тени (черный) .OffsetX = 3 ‘ Смещение тени по горизонтали .OffsetY = 3 ‘ Смещение тени по вертикали .Transparency = 0.5 ‘ Прозрачность тени (0 – непрозрачная, 1 – полностью прозрачная) End With End If Next shp ‘ Обработка встроенных объектов (InlineShapes) ‘ Преобразуем их во временные плавающие объекты, добавляем тень и возвращаем в исходное состояние For i = ActiveDocument.InlineShapes.Count To 1 Step -1 Set shp = ActiveDocument.InlineShapes(i).ConvertToShape() With shp.Shadow .Visible = msoTrue .ForeColor.RGB = RGB(0, 0, 0) .OffsetX = 3 .OffsetY = 3 .Transparency = 0.5 End With shp.ConvertToInlineShape Next i End Sub

Без автоматизации процесс наложения теней будет долгим и рутинным, особенно если рисунков много. Придется выучить параметры тени или пользоваться инструментом «Формат по образцу». 

Рис. 1. Процесс наложения теней штатными средствами Word
Рис. 1. Процесс наложения теней штатными средствами Word

Выполнение действия через созданный макрос.

Рис. 2. Процесс наложения теней с помощью макроса
Рис. 2. Процесс наложения теней с помощью макроса

Как мы видим, макрос прекрасно справился с задачей. При желании можно отредактировать его параметры под свои хотелки.

keepWithNext

В документах регулярно возникает ситуация, когда рисунок и описывающий его текст оказываются на разных страницах, что неудобно для читателя.

Рис. 3. Разрыв страницы между подписью и самим рисунком
Рис. 3. Разрыв страницы между подписью и самим рисунком

Можно слегка переверстать текст, но его слишком мало. Тогда спасает опция «Не отрывать от следующего» в параметрах абзаца.

Это действие можно описать однострочным макросом, который затем повесить кнопкой на ленте:

Sub keepWithNext() With Selection.ParagraphFormat .keepWithNext = True End With End Sub

Такими простыми макросами можно заменить множество других мелких действий. Однако мы не будем на них останавливаться и перейдем к более интересным и сложным макросам.

Многомодульные макросы

Многомодульные макросы — это настоящие комбайны автоматизации. Они могут объединять большое количество действий и существенно расширять ваши возможности в Word.

applyImageStyleAndCaption

Помните правила оформления документации по ГОСТам? Все таблицы и рисунки должны быть подписаны. В этом есть смысл: подпись — лучший способ объяснить читателю, что он там увидит. Пока сочиняется подпись, можно оформить рисунок в один клик: добавить нумерацию и тени.

Рис. 4. Применение стилей и создание подписей к рисункам с помощью макроса
Рис. 4. Применение стилей и создание подписей к рисункам с помощью макроса

deleteReadyComments

Кроме того, макросы могут расширить стандартные функции Word. К примеру, удалить все решенные (серые) примечания также можно в один клик. Цепочки с нерешенными комментариями удалены не будут.

Рис. 5. Удаление решенных комментариев с помощью макроса
Рис. 5. Удаление решенных комментариев с помощью макроса

findRepeated

Сколько раз было: пишете очередное длинное предложение, написали три четверти, решили переформулировать. Тащим начало в конец, конец в середину, дописываем недостающие обороты. Word не подчеркивает никаких ошибок, но свежий взгляд сразу заметит: одна фраза в предложении продублирована. Обычный спелл-чекер проверяет ненужные повторы только у соседних слов, а макросом можно найти все повторяющиеся словосочетания в предложении.

Рис. 6. Поиск и выделение повторов фраз с помощью макроса
Рис. 6. Поиск и выделение повторов фраз с помощью макроса

Теперь перейдем к более специализированным макросам. Рассмотрим примеры макросов, работающих по выделенной области текста: это крутая фича, для реализации которой достаточно использовать свойство Selection.Range. Кроме того, макросы можно адаптировать под свои задачи, если в данном исполнении они не совсем вам подходят.

addFootnotesToHackTools

Например, в ходе подготовки одного отчета мне пришлось упоминать множество инструментов, на каждый из которых нужно было сделать ссылку. Никакого гугления и копипаста: выделяем область текста, запускаем макрос — и на все утилиты ставятся сноски со ссылками. Один человек написал макрос — десятки сэкономили себе пару часов.

Как вы догадались, такой макрос нужно дополнительно поддерживать в актуальности, ведь он не обращается ни в какую базу, все ссылки захардкожены. Например, иногда старые репозитории перестают существовать. Мы просто договорились между пользователями макроса, как быстро править ссылки в нем. Краткое пояснение по адаптации макроса под ваши нужды приведено на моем GitHub: https://github.com/Bamboooo-mt/Macros.

Рис. 7. Добавление сносок к словам с помощью макроса
Рис. 7. Добавление сносок к словам с помощью макроса

 LinksToFootnotes

Отчетные документы по теме кибербеза — это не только крутые векторы атак, но и полезные для читателя рекомендации. Большая часть из них уже приведена в документации разработчиков, нужно только сослаться на них в отчете. Но просто гиперссылки может быть недостаточно: если распечатать отчет, то читатель не сможет увидеть URL. А длинные URL-адреса занимают место в тексте. Выход, конечно — использовать сноски. Выделяем область текста и макросом переносим все URL в сноски.

Рис. 8. Превращение ссылок в тексте в сноски с помощью макроса
Рис. 8. Превращение ссылок в тексте в сноски с помощью макроса

CVEtoHyperlinks

Многие уязвимости являются общеизвестными. Поэтому они описаны в классификаторах под уникальными номерами. Если читатель изучает отчет в электронном виде, хорошо дать ему все нужные ссылки. Макрос позволяет поставить их для известных уязвимостей (например, для уязвимостей из списка CVE). Причем не нужно прописывать каждую ссылку в коде, все за нас сделает регулярное выражение.

Рис. 9. Создание гиперссылок на тексте с помощью макроса
Рис. 9. Создание гиперссылок на тексте с помощью макроса

maskingPass

Если нужно упомянуть в тексте конфиденциальную информацию, ее следует замаскировать. Выделяем нужный пароль, нажимаем хоткей — и по установленному паттерну часть текста заменяется звездочками.

Рис. 10. Маскирование выделенной части текста с помощью макроса
Рис. 10. Маскирование выделенной части текста с помощью макроса

replaceImagesFromFolder

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

Рис. 11. Процесс маскирования конфиденциальной информации на рисунках с помощью макроса
Рис. 11. Процесс маскирования конфиденциальной информации на рисунках с помощью макроса

Возможности макросов ограничиваются только вашей фантазией. Например, я общался с ребятами, у которых есть макрос для парсинга деталей уязвимостей из отдельных таблиц и сборки в полноценную сводную таблицу. Это не только экономит время и силы при сборке сводной таблицы, но и спасает от рассинхронизации данных между разделами при правках документа.

Использование ИИ через макросы Word

Далеко не все задачи можно решить с помощью статичного кода, особенно когда задача стоит аналитическая или творческая. Однако никто не запрещает обращаться к ИИ прямо в макросах посредством API. Таким образом можно использовать как открытые модели, так и локально развернутые (например, на домашнем компьютере). В макросе-примере CVSS4macro мы обращаемся через API к LLM для подсчета оценки по CVSS v4 по выделенному фрагменту текста в документе. В ответе в примечании нам возвращается вектор буквально спустя 5 секунд после запуска.

Рис. 12. Пример применения макроса с выводом ответа чат-бота в примечании для подсчета оценки по методике CVSS v4
Рис. 12. Пример применения макроса с выводом ответа чат-бота в примечании для подсчета оценки по методике CVSS v4

Использование ИИ через надстройки Word

Если вы всегда считали, что можете создать лучшую версию Word, поздравляю, такая возможность существует благодаря надстройкам. По сути, это ваше приложение внутри приложения Microsoft. И конечно же, с помощью самописных надстроек можно выполнять интеграцию с LLM, в том числе с локальными моделями. Уже существуют надстройки, с помощью которых вы можете работать с общедоступными моделями, но тогда все ваши бесценные данные будут отправляться на серверы хитрых сторонних разработчиков. В примере представлена надстройка с интегрированной локальной LLM DeepSeek. С помощью данной надстройки можно переписывать текст в официально-деловой стиль нажатием пары кнопок (но перепроверять и переписывать за ней все равно придется).

Рис. 13. Пример применения надстройки Word с внедренной LLM для перефразирования текста в официально-деловой стиль
Рис. 13. Пример применения надстройки Word с внедренной LLM для перефразирования текста в официально-деловой стиль

Файлы надстройки и гайд по созданию аналогичной представлены на моем GitHub: https://github.com/Bamboooo-mt/Word-Office-Add-ins.

Заключение

Использование макросов позволит в разы ускорить подготовку отчетных материалов и использовать ваши сэкономленные человеко-часы на другие действия, например на поедание печенек в офисе. У меня такие макросы экономили несколько часов на документ, особенно когда в нем много картинок и ссылок. Надеюсь, что данный материал поможет сделать это и вам. А если вы уже вкатились в автоматизацию Microsoft Office, то какие макросы или средства используете? Какие идеи интересных скриптов реализовать не получилось? Или может поделитесь опытом автоматизации в других офисных пакетах. Буду ждать вас в комментариях!

Источник: habr.com

✅ Найденные теги: Как, новости

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых