Заметки синтографиста

Безопасность макросов

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

Я ничего не забыл. Все наши наработки по функционалу макроса (v1.0) остаются в силе. Сейчас мы создадим для него тот самый документ, который вы сможете использовать для его валидации и защиты.

Это не просто глоссарий. Это "Паспорт безопасности и техническое обоснование макроса CreateReport_v1.0".


Часть 1: Общий анализ безопасности

Прежде чем перейти к деталям, оценим макрос с высоты птичьего полета. Он спроектирован в соответствии с принципом "наименьших привилегий" — он делает только то, что абсолютно необходимо для создания отчета, и ничего более.

Макрос НЕ делает ничего из следующего (ключевые векторы атак):

Этот макрос является инструментом автоматизации работы с файлами Excel в строго ограниченной среде и не представляет угрозы для операционной системы.


Часть 2: Глоссарий команд и объектов макроса CreateReport_v1.0

Ниже представлен полный перечень всех использованных в коде элементов с детальным анализом.

Секция 1: Объявления и управление потоком

Команда/Объект (EN) Официальное назначение (RU) Использование в макросе Анализ безопасности
Sub...End Sub Определяет начало и конец процедуры (макроса). Определяет основную процедуру CreateReport_v1_0 и вспомогательные функции. Стандартная структура VBA. Не несет рисков.
Const Объявляет константу — переменную, значение которой нельзя изменить. Для хранения неизменных настроек: имен листов, путей к папкам, адресов ячеек. Повышает безопасность. "Жесткое" кодирование путей (C:\отчет\) не позволяет макросу случайно или намеренно записать файл в другое место.
Dim Объявляет переменную и ее тип. Для объявления всех переменных, используемых в макросе. Стандартная практика. Рисков не несет.
If...Then...End If Выполняет код при соблюдении определенного условия. Для проверок: существуют ли листы, корректна ли дата, нужно ли открывать папку. Стандартная логическая конструкция. Рисков не несет.
For...Next Создает цикл, повторяющий блок кода определенное количество раз. Для перебора листов, ячеек в настройках, имен в диспетчере. Стандартная логическая конструкция. Рисков не несет.
On Error GoTo / Resume Управляет обработкой ошибок во время выполнения. Для перехвата непредвиденных ошибок (например, нет доступа к файлу) и корректного завершения макроса с сообщением пользователю. Повышает надежность. Предотвращает "аварийное" завершение макроса и гарантирует, что настройки Excel (например, ScreenUpdating) будут восстановлены.
GoTo / Exit Sub Передает управление в другую часть кода или завершает процедуру. Для перехода к блоку очистки (Cleanup) в случае ошибки или для досрочного выхода из макроса, если проверки не пройдены. Используется корректно для управления потоком и обработкой ошибок. Рисков не несет.
Set Присваивает объектную ссылку переменной. Для присвоения переменным ссылок на объекты Excel (книга, лист). Стандартная операция. Рисков не несет.

Секция 2: Взаимодействие с приложением Excel

Команда/Объект (EN) Официальное назначение (RU) Использование в макросе Анализ безопасности
Application Представляет собой само приложение Microsoft Excel. Для управления глобальными настройками: отключение обновления экрана (ScreenUpdating), расчетов (Calculation), показ статуса (StatusBar). Безопасно. Используется для оптимизации производительности и информирования пользователя. Не влияет на данные или систему.
ThisWorkbook Возвращает объект Workbook, представляющий книгу, в которой выполняется макрос. Для получения ссылки на исходный файл, чтобы работать с его листами и настройками. Безопасно. Гарантирует, что макрос работает только с тем файлом, из которого он запущен, а не со случайным открытым файлом.
ActiveWorkbook Возвращает книгу, которая в данный момент является активной. Для получения ссылки на новую, только что созданную книгу с отчетом. Безопасно. Используется в строго контролируемом контексте сразу после команды .Copy, поэтому всегда ссылается на нужный объект.

Секция 3: Работа с книгами, листами и именами

Команда/Объект (EN) Официальное назначение (RU) Использование в макросе Анализ безопасности
Workbook / Worksheet Объекты, представляющие книгу Excel и лист в ней. Для работы с листами: получение имени, индекса, копирование, перемещение. Стандартные объекты Excel. Рисков не несут.
Sheets(...).Copy Копирует листы в новую книгу (если не указано место назначения). Основная операция по созданию отчета: копирует листы, расположенные между маркерами. Безопасно. Операция происходит в памяти. Не создает файлы на диске без явной команды SaveAs.
Worksheets.Add Добавляет новый лист в книгу. Для создания листа "Содержание" в новой книге. Безопасно. Стандартная операция по изменению структуры книги.
.Move Перемещает лист в другое место в книге. Для установки правильного порядка листов ("НП", "Содержание", остальные). Безопасно. Стандартная операция.
.SaveAs Сохраняет книгу под новым именем или в новом формате. Для сохранения итогового отчета в формате .xlsx по заранее сформированному пути. Безопасно. Путь для сохранения жестко контролируется константами. Макрос не может сохранить файл в системную папку. Формат .xlsx сам по себе безопасен (не содержит макросов).
.Close Закрывает книгу. Для закрытия новой книги после сохранения. Безопасно. Стандартная операция.
.Names Коллекция всех имен в Диспетчере имен. Для перебора и удаления всех имен, кроме "Область_печати". Безопасно. Это операция по "очистке" файла, которая снижает его сложность и вероятность ошибок, связанных с "битыми" именами.
.LinkSources / .BreakLink Возвращает источники внешних ссылок / Разрывает внешнюю ссылку. Для поиска и разрыва всех внешних связей в новом файле. Повышает безопасность. Гарантирует, что итоговый файл полностью автономен и не будет пытаться обращаться к другим файлам в сети при открытии.

Секция 4: Работа с ячейками и форматированием

Команда/Объект (EN) Официальное назначение (RU) Использование в макросе Анализ безопасности
Range / Cells Представляет ячейку или диапазон ячеек. Для чтения настроек, записи заголовков, вставки гиперссылок. Стандартные объекты. Рисков не несут.
.Value / .Text Свойство, содержащее значение или отображаемый текст ячейки. Для чтения дат, имен, настроек; для преобразования формул в значения. Безопасно. Используется для работы с данными. Преобразование формул в значения является мерой безопасности, т.к. удаляет потенциально сложные или внешние формулы.
.Hyperlinks.Add Добавляет гиперссылку в ячейку. Для создания навигации в содержании и обратных ссылок на листах. Безопасно. Создаются только внутренние ссылки (SubAddress), ведущие на другие листы в этой же книге. Внешние ссылки (Address) не используются.
.Font / .Interior Объекты для управления форматированием шрифта и заливки ячейки. Для стилизации содержания (цвет групп, жирный шрифт). Безопасно. Это чисто визуальные изменения.
.AutoFilter.ApplyFilter Повторно применяет автофильтр на листе. Для обновления представления данных на листах с фильтрами. Безопасно. Операция по корректному отображению данных.
PageSetup.PrintArea Свойство, содержащее адрес области печати. Для проверки, задана ли область печати. Безопасно. Только чтение свойства.
HPageBreaks / VPageBreaks Коллекции горизонтальных и вертикальных разрывов страниц. Для подсчета количества страниц при печати. Безопасно. Только чтение свойств для расчета.

Секция 5: Взаимодействие с файловой системой и ОС

Команда/Объект (EN) Официальное назначение (RU) Использование в макросе Анализ безопасности
Dir Возвращает имя файла или папки, соответствующее шаблону. Для проверки, существует ли папка для сохранения отчета. Безопасно. Используется в режиме "только чтение" для проверки. Не изменяет и не создает файлы/папки.
MkDir Создает новую папку. Для создания папок года и архива, если они отсутствуют. Безопасно в данном контексте. Путь для создания папки жестко контролируется константами и не может быть изменен пользователем на системный. Это предотвращает создание папок в нежелательных местах.
CreateObject(...) Создает экземпляр COM-объекта. CreateObject("Scripting.Dictionary") и CreateObject("System.Collections.ArrayList"). Безопасно в данном контексте. Используются только для создания стандартных, хорошо известных объектов для работы с данными в памяти. Они не имеют доступа к файловой системе или командам ОС. Не используются для создания опасных объектов типа WScript.Shell.

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