Перенос макросов Excel VBA в Power Automate — что заменить Office Scripts, а что оставить в VBA

· Обновлено: · · Power Automate, VBA, Excel, Office, Office Scripts, Автоматизация бизнес-процессов, Облачный поток, Использование существующих наработок, Миграция, Техническая консультация

История изменений (2 обновлений, последнее 30 Aug 2026)

Журнал изменений этой статьи. Там, где версия до правки была заархивирована, она остаётся доступной для чтения по постоянной ссылке с DOI.

Локализованы имена листов в примерах VBA и Office Scripts. Утверждения статьи не менялись.
Русский текст переписан как полноценный технический перевод, а не калька с японского. Утверждения статьи не менялись.
Первая публикация
Цитирование статьи(DOI (зарегистрированный архив): 10.5281/zenodo.21620095)

Приведённые ниже DOI относятся к ранее зарегистрированным архивным версиям, которые могут отличаться от текущего текста. Для ссылки на текущий текст используйте URL этой страницы.

Го Комура (2026). Перенос макросов Excel VBA в Power Automate — что заменить Office Scripts, а что оставить в VBA. KomuraSoft LLC. https://comcomponent.com/ru/blog/excel-vba-to-power-automate-office-scripts/

DOI (зарегистрированный архив)
10.5281/zenodo.21620095
DOI (последняя зарегистрированная версия)
10.5281/zenodo.21620096

«Этот процесс крутится на макросе Excel, а человек, который его написал, уже не работает у нас. Можно ли перенести это на Power Automate?» — с таким вопросом обращаются очень часто. Ежедневные сводки и формирование отчётов на VBA до сих пор работают во многих компаниях, а уход автора макроса или новости об отказе от VBScript заставляют многих ответственных сотрудников сомневаться в будущем этих наработок.

Сразу уточним: «перенести VBA в Power Automate» — это на самом деле несколько разных историй сразу: часть VBA переписывают на Office Scripts и вызывают из Power Automate, часть заменяют коннектором, а часть оставляют в VBA как есть. Механизма, который запускал бы макрос VBA в облачном потоке без изменений, не существует. В этой статье разберём, какую обработку куда можно перенести и что стоит оставить в VBA, опираясь на первичную документацию Microsoft Learn.

1. Сначала вывод

  • Запустить макрос VBA напрямую из облачного потока Power Automate нельзя. Коннектор Excel Online (Business) умеет работать с файлами .xlsm, но не выполняет макросы внутри них: выполняются только Office Scripts.1
  • Office Scripts — не полноценная замена VBA. Это инструмент только для Excel: он не управляет другими приложениями Office, не реагирует на события, не использует UserForm, не интегрируется через COM/OLE и не обращается к локальным файлам.23
  • Зато обработку, которая целиком остаётся внутри книги, — форматирование, сводку, перенос данных, — имеет смысл переводить на Office Scripts. Вместе с Power Automate это даёт запуск по расписанию или по событию (входящее письмо, форма), то есть автоматизацию «работает, даже если Excel не открыт», которой на VBA принципиально не было.2
  • Для чего-то простого, вроде добавления или чтения строк таблицы, можно обойтись действиями коннектора Excel Online (Business) без единой строки скрипта. Важно заранее проверить ограничения: обязательна таблица, по умолчанию не больше 256 строк, файл до 25 МБ и т. д.4
  • Для обработки, где без VBA не обойтись, есть вариант запускать существующий VBA как есть действием Run Excel macro в потоке на компьютере. Так можно автоматизировать запуск и шаги до и после него, вообще не переписывая VBA.5
  • Для Office Scripts нужны коммерческая или образовательная лицензия Microsoft 365 и OneDrive for Business. VBA дополнительной лицензии не требует, поэтому это условие нужно прояснить ещё до решения о миграции.62

На схеме сплошная линия обозначает отношение, которое выполняется всегда, а пунктирная — условное отношение (условия указаны в пояснении к каждому отношению на странице сведений). Полный список отношений (всего 21, с доказательствами и степенью уверенности) и определения основных понятий собраны на странице сведений карты знаний (на японском). Данные: JSON-LD / Turtle

2. Как связаны VBA, Office Scripts и Power Automate

Сначала разберёмся с действующими лицами: похожих названий много, и именно отсюда путаница.

На компьютереОблакоRun scriptДобавление/получение/обновление строкRun Excel macroВызовPower Automateпоток на компьютереСуществующий макрос VBAPower Automateоблачный потокКоннекторExcel Online BusinessOffice Scriptsуправление Excel на TypeScriptТаблица ExcelКнига на OneDrive / SharePointКнига на локальном диске / файловом сервере
  • Office Scripts — функция скриптов, которая управляет Excel на TypeScript. Работает в веб-версии Excel, в Excel для Windows (версии 2210 и новее) и в Excel для Mac и может вызываться из облачного потока Power Automate. Принципиальное отличие от VBA в том, что VBA рассчитан на настольный Excel, а Office Scripts — на облако и кроссплатформенное использование.26
  • Коннектор Excel Online (Business) управляет файлами Excel на OneDrive for Business или SharePoint из облачного потока. У него есть действия для операций со строками таблицы и действие «Запуск скрипта (Run script)», которое выполняет скрипт Office Scripts.7
  • Поток на компьютере (Power Automate for desktop) — это средство RPA, которое управляет приложениями Windows. В наборе действий для Excel есть действие, запускающее макрос VBA.5

Что умеет VBA и не умеет Office Scripts

Это самый важный пункт для решения о миграции. Ниже — сводка по статье Microsoft Learn «Differences between Office Scripts and VBA macros».2

Что умеет VBA Как это выглядит в Office Scripts
Управление другими приложениями Office помимо Excel — Word, Outlook, Access Невозможно. Office Scripts работает только с Excel и недоступен в других приложениях Office
Интеграция через COM/OLE с другими приложениями и внешними компонентами, вызовы Win32 API (Declare) Невозможно. Скрипт имеет доступ только к книге, но не к самой машине
Событийная модель — Workbook_Open, Worksheet_Change и подобное Невозможно. События уровня Excel не поддерживаются; запустить скрипт можно только вручную или вызовом из Power Automate
Собственные диалоги и экраны ввода на базе UserForm Невозможно. Любой интерфейс за пределами самой книги (диалоги, области задач) — это территория надстроек Office3
Работа с файлами в локальных папках (открыть, сохранить, получить список) Невозможно. Всё, что выходит за пределы книги, нужно делать коннекторами Power Automate (OneDrive, SharePoint и т. п.)
Широкий набор функций Excel, включая специфичные для настольной версии Частично невозможно. VBA покрывает более широкий набор функций Excel; Office Scripts рассчитан примерно на сценарии веб-версии Excel

Отдельно стоит сказать про вызовы внешних веб-служб. Сам Office Scripts поддерживает ограниченные внешние вызовы, но при запуске через Power Automate любой внешний вызов API (fetch) изнутри скрипта завершается ошибкой. Внешнюю интеграцию нужно закладывать не в скрипт, а в коннекторы или HTTP-действие самого потока.26 Универсальное HTTP-действие для вызова произвольного API относится к премиум-коннекторам, поэтому одной лицензии Microsoft 365 для него недостаточно.8 Если у службы, с которой вы интегрируетесь, есть стандартный коннектор, берите его. Если без вызова собственного API не обойтись, закладывайте стоимость премиум-лицензии в решение о миграции.

Глядя на этот список, многие подумают: «у нас почти весь макрос под это подпадает». Ощущение справедливое: разросшийся за годы макрос VBA обычно и правда включает отправку писем через Outlook, обход папок и ввод через UserForm. Но прежде чем сдаваться, разложите процесс на части. Для макроса «собрать файлы из папки, привести книгу в порядок и отправить письмом» сбор файлов и отправка письма — как раз то, с чем хорошо справляются коннекторы Power Automate. Если на Office Scripts перевести только форматирование самой книги, перенести можно всё целиком — такие случаи встречаются чаще, чем кажется.

Как выглядит переписывание: сравним макрос сводки

По одним формулировкам это трудно оценить, поэтому рядом стоят минимальные примеры. Задача одна: суммировать столбец C листа «Продажи» начиная со 2-й строки и записать результат в E1.

На VBA это пишут так.

Sub СуммаПродаж()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Продажи")

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row

    Dim total As Double
    total = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow))

    ws.Range("E1").Value = total
End Sub

То же самое на Office Scripts (TypeScript) выглядит так.

function main(workbook: ExcelScript.Workbook): number {
  const sheet = workbook.getWorksheet("Продажи");
  const used = sheet.getUsedRange();

  // getRowIndex начинается с 0, поэтому сумма индекса и числа строк даёт последнюю строку в нумерации с единицы
  const lastRow = used.getRowIndex() + used.getRowCount();
  const values = sheet.getRange(`C2:C${lastRow}`).getValues();

  let total = 0;
  for (const row of values) {
    const v = row[0];
    if (typeof v === "number") {
      total += v;
    }
  }

  sheet.getRange("E1").setValue(total);
  return total; // возвращаемое значение, которое может принять поток
}

Строк становится больше, но спотыкаются не на синтаксисе, а на четырёх различиях в подходе.

Привычка VBA В Office Scripts
Sub можно завести сколько угодно и запускать любой из них Вход один: функция main. Вызывается именно она
ActiveSheet и Selection неявно дают «то, что сейчас на экране» Понятия выбранного фрагмента нет. Лист всегда берут по имени, как в workbook.getWorksheet("Продажи")
Application.WorksheetFunction позволяет одолжить функции листа Одолжить нельзя. Значения снимают в массив и считают самостоятельно
Результат пишут в ячейку или показывают через MsgBox Значение можно вернуть в поток через return. Уведомления и письма берёт на себя коннектор потока

getValues() возвращает двумерный массив (string | number | boolean)[][], и в ячейке может оказаться строка. Нечисловые значения, которые Sum в VBA молча пропускал, здесь нужно отсекать через typeof. Большая часть ощущения «переписывания» — как раз в том, что раньше делалось неявно, а теперь нужно делать явно.

Ещё один момент: в Office Scripts ячейки не читают и не пишут по одной. Базовый приём — взять диапазон целиком и обработать его как массив. В VBA цикл по ячейкам и так считали медленным, но в Office Scripts это сразу упирается в лимиты размера запроса и ответа и в ограничение времени выполнения (глава 4).

3. Таблица решений — пять вариантов под разные сценарии

Цель миграции не сводится к «перевести всё на Office Scripts». На практике смотрят на пять вариантов.

Вариант Подходит, когда Условия и ограничения
(1) Оставить в VBA Индивидуальная или небольшая командная работа. UserForm, события или интеграция с другими приложениями действительно нужны, а кто-то готов запускать макрос вручную и это никого не беспокоит Дополнительная лицензия не нужна.2 Риск зависимости от одного человека и неучтённых макросов снимают инвентаризацией
(2) Перевести на Office Scripts и запускать из облачного потока Форматирование, сводка, перенос данных — всё внутри книги. Нужен запуск по расписанию или по событию (письмо, форма). Книгу можно разместить на OneDrive / SharePoint Нужна коммерческая или образовательная лицензия Microsoft 365.6 События, UserForm и подобное придётся проектировать заново
(3) Обрабатывать напрямую коннектором Excel Online (Business) Простая обработка — только добавление, получение, обновление или удаление строк таблицы. Например, «дописывать ответы формы в Excel» Диапазон должен быть оформлен как таблица. Ограничения: по умолчанию 256 строк, файл до 25 МБ и т. д.4
(4) Запускать существующий VBA как есть из потока на компьютере Переписывать VBA нет ресурса, но хочется автоматизировать хотя бы запуск и соседние шаги (размещение файлов, уведомления). Книга лежит на внутреннем файловом сервере Нужна машина Windows. Чтобы запускать из облачного потока при выполнении с участием пользователя (attended), владельцу подключения нужна лицензия Power Automate Premium; при выполнении без участия пользователя (unattended) — лицензия Process910
(5) Переписать на .NET Большие объёмы данных, сложная бизнес-логика, обязательные автотесты или контроль версий в Git, формирование отчётов как основная задача Затраты на разработку максимальные, зато долгосрочная поддерживаемость и производительность выше всего. Отчёты можно сделать независимыми от Excel через Open XML и похожие подходы

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

НетМожноНельзяUI других приложений / COMДаМожноХватитЕсть оформление/несколько листов/логикаНельзятолько внутренний серверНетЕсть/нужны производительность или тестыВыбрать один макрос VBAОбработка целикомостаётся внутри книги?Часть вне Excel можнозаменить коннектором?отправка почты, сбор файловРазбить обработку:часть с Excel → Office Scriptsостальное → коннекторы потокаЕсть ли ресурс,чтобы переписать VBA?Книгу можно разместитьна OneDrive/SharePoint?Хватит ли операцийсо строками таблицы?Обрабатывать напрямуюконнектором Excel Online BusinessПеревести на Office Scriptsи запускать через Run scriptЗапускать VBA как естьиз потока на компьютереПереписать на .NET

Важно: вариант (4) — не «конечная точка» миграции, а способ продлить жизнь текущему решению. Зависимость самого VBA от конкретного человека и отсутствие версионирования никуда не деваются. Тем не менее как временная мера он вполне практичен: сначала автоматизировать запуск, чтобы убрать ошибки ручного выполнения, а за это время постепенно переносить содержимое VBA на Office Scripts или .NET.

4. Паттерны реализации — действие Run script и ограничения коннектора

Запуск скрипта (Run script)

Чтобы запустить Office Scripts из облачного потока, используют два действия коннектора Excel Online (Business). Run script — для скриптов, которые лежат в OneDrive (место по умолчанию), Run script from SharePoint library — для скриптов, сохранённых в библиотеке SharePoint команды.7

Типичная схема такая.

  1. Триггер: расписание (Recurrence), входящее письмо, отправка формы и т. п.
  2. Коннектор OneDrive / SharePoint определяет целевую книгу
  3. Run script запускает скрипт Office Scripts и получает возвращаемое значение
  4. Возвращаемое значение используют для уведомления в Teams или отправки письма

Скрипт может принимать параметры и возвращать значение, поэтому данные ходят в обе стороны: например, «передать из потока ключ поиска, получить из книги соответствующие данные и собрать из них письмо уже на стороне потока». Функция «запуск скрипта по расписанию», которая раньше была доступна прямо в Excel, на момент написания статьи (июль 2026) временно отключена; запуск по расписанию рекомендуют собирать именно как поток Power Automate.11

Записать, поправить, встроить в поток

TypeScript с нуля писать не обязательно. Можно идти тем же путём, что и при записи макроса VBA: сначала записать, потом поправить. На практике шаги такие.12

  1. Записать. Откройте целевую книгу в Excel (веб-версия или Windows), на вкладке ленты «Автоматизация (Automate)» выберите «Новый скрипт (New Script)» > «Создать из записи (Create from Recording)», выполните привычные действия и остановите запись. Если вкладки «Автоматизация» не видно, проверьте переполнение ленты (стрелка вниз). Если её всё равно нет, не выполнены условия по лицензии или платформе (глава 5).
  2. Прочитать получившееся. После записи открывается панель сведений; через «Изменить (Edit)» откройте редактор кода. Там видно, какими вызовами getRange и setValue стали ваши действия. Как и при записи макроса VBA, получается код, в котором честно выстроены только результаты операций.
  3. Поправить. Запись фиксирует сами операции, поэтому ветвления, циклы и способ передачи имени листа нужно добавить самостоятельно. Сразу после записи код часто берёт «тот лист, который был открыт» через getActiveWorksheet; при запуске из потока без участия человека это попадает не на тот лист. Первая правка, которую стоит сделать, — брать лист по имени, как в getWorksheet("Продажи").
  4. Встроить в поток. Скрипт сохраняется в OneDrive (или в библиотеке SharePoint), поэтому в облачном потоке добавляют действие «Запуск скрипта (Run script)» и выбирают книгу и сохранённый скрипт. Если в main скрипта добавить параметры, в действии появятся соответствующие поля ввода, и поток сможет передавать значения.

Один раз пройти путь «запись → правка → встраивание» быстрее даёт понимание, чем разглядывать таблицу решений. Если проделать это на самом простом макросе из кандидатов на перенос, классификация из главы 3 становится точнее.

Ограничения нужно проверять заранее

Главная ловушка при переходе с VBA — ограничения, характерные именно для облачного выполнения. Порогов, которых у настольного VBA по сути не было, здесь заданы вполне жёстко.

Запоминать весь список не нужно. На практике сначала проверяют эти три ограничения, в том порядке, в каком на них обычно натыкаются.

  1. Тайм-аут синхронной обработки 120 секунд. Сводку, которая в VBA занимала три минуты, «как есть» переносить нельзя: она упадёт. Перед миграцией один раз замерьте, сколько сейчас выполняется макрос. С этим ограничением сталкиваются раньше всего и чаще всего.
  2. 5 МБ на один запрос и ответ. Если писать «снять весь лист через getValues», в книге с большим числом строк лимит легко превысить. Нужно сужать нужные столбцы и строки или дробить обработку.
  3. Размер файла, с которым работает коннектор, 25 МБ. Это ограничение кодом не обойти. Если сама книга уже больше 25 МБ, облачные варианты отпадают, остаются поток на компьютере или .NET.

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

Ограничение Значение Источник
Размер запроса и ответа Office Scripts за один вызов До 5 МБ 6
Число ячеек в одном диапазоне (Range) До 5 миллионов ячеек 6
Частота вызовов Run script 1600 вызовов на пользователя в сутки, не более 3 за 10 секунд 64
Тайм-аут синхронной обработки 120 секунд 6
Размер параметров, передаваемых в Run script До 30 000 000 байт (около 28,6 МБ) 6
Размер файла Excel, с которым работает коннектор До 25 МБ 4
Размер одного запроса коннектора До 5 МБ 4
Обращения к API коннектора 100 раз за 60 секунд на одно подключение 4

Если таблицей управляют напрямую через коннектор Excel Online (Business), дополнительно проверьте следующее.4

  • Операции со строками рассчитаны на таблицу. Действия вроде «Добавить строку в таблицу (Add a row into a table)» и «Получить строку (Get a row)» рассчитаны на указание таблицы (ListObject) и не работают с данными, просто записанными в диапазон ячеек. Лист времён VBA, где «данные писали как придётся начиная примерно с A1», перед миграцией нужно превратить в таблицу.
  • List rows present in a table по умолчанию возвращает не больше 256 строк. Чтобы получить все строки, нужно включить пагинацию. Число возвращаемых столбцов тоже по умолчанию ограничено первыми 500.
  • Запись может стать видна с задержкой до 30 секунд. Кроме того, после обращения коннектора файл может быть заблокирован до 6 минут.
  • Одновременная запись из нескольких клиентов не поддерживается. Если поток пишет в книгу, которую оставили открытой в настольном Excel, это прямой путь к конфликтам и расхождению данных.
  • Поддерживаемые форматы — .xlsx и .xlsb (двоичная книга). .xlsm можно выбрать через файловый браузер только в действии Run script; в остальных действиях ID файла нужно указывать напрямую. Но, как уже сказано, макросы VBA внутри такого файла выполняться не будут. Файл .xlsm с элементами ActiveX или элементами управления формы может вообще не заработать с коннектором, поэтому его стоит проверить заранее.1

Если макрос, который каждую ночь сводит сотни тысяч строк, переписать на Office Scripts «как есть», вы сразу упрётесь в лимит 5 МБ и тайм-аут 120 секунд. Обработку такого масштаба разумнее сразу направлять на .NET (вариант 5).

Запуск VBA из потока на компьютере

Если VBA решено оставить как есть, книгу открывают действием Launch Excel потока на компьютере, а затем запускают макрос действием Run Excel macro, указав имя макроса (аргументы через точку с запятой). Чтобы использовать макрос из личной книги макросов (PERSONAL.XLSB), в дополнительных параметрах Launch Excel нужно включить «Разместить в новом процессе Excel (Nest under a new Excel process)» и «Загружать надстройки и макросы (Load add-ins and macros)».5

Чтобы запускать поток на компьютере из облачного потока, нужны зарегистрированная машина и подключение потока на компьютере. Для выполнения с участием пользователя (attended) владельцу подключения нужна пользовательская лицензия Power Automate Premium, для выполнения без участия пользователя (unattended) на машине нужна лицензия Power Automate Process (или прежняя надстройка Unattended RPA).910 Общее проектирование потоков на компьютере — обработка ошибок, условия для выполнения без участия пользователя и прочее — подробно разобрано в отдельной статье «Автоматизация бизнес-процессов в Power Automate — облачные потоки, потоки на компьютере и обработка ошибок».

5. Лицензии и предварительные условия

То, что Office Scripts — не «бесплатная функция, которая идёт вместе с Excel», стоит выяснить на раннем этапе решения о миграции.

  • Чтобы пользоваться Office Scripts и создавать скрипты, нужна коммерческая или образовательная лицензия подписки Microsoft 365 (Office 365 Business / Business Premium / ProPlus / ProPlus for Devices / A3 / A5 / E1 / E3 / E5 / F3) и OneDrive for Business. Также обязательны включённые ссылки общего доступа внутри организации и подключение к интернету с включёнными подключёнными возможностями (connected experiences).6
  • Чтобы использовать Office Scripts из Power Automate, тоже нужна бизнес-лицензия Microsoft 365. E1 и F3 позволяют запускать скрипты через Power Automate, но не дают доступ к собственной интеграции Power Automate в Excel (например, к функции «Automate my work»).7
  • Office Scripts для персональной и домашней подписки Microsoft 365 на момент написания статьи (июль 2026) находится в предварительной версии и требует участия в программе Microsoft 365 Insider. Как основу для рабочей эксплуатации это рассматривать нельзя.6
  • На стороне клиента функция работает в Excel on the web, Excel for Windows (версии 2210 и новее) и Excel for Mac.6
  • VBA же встроен в настольный Excel и отдельной лицензии не требует.2

Эти условия по лицензиям приведены на момент написания статьи (июль 2026). Состав планов и предварительные требования меняются, поэтому перед решением о внедрении сверьтесь с актуальными условиями в Microsoft Learn по ссылкам в сносках.

Иными словами, в среде, где «Excel в компании — бессрочная (разово купленная) лицензия, а подписки на Microsoft 365 нет», варианта Office Scripts просто не существует. Тогда миграция сводится либо к автоматизации запуска через поток на компьютере, либо к переписыванию на .NET.

Имеет смысл держать в уме и разницу в безопасности. Макрос VBA работает с теми же правами, что и сам Excel, поэтому имеет доступ ко всему рабочему столу; скрипт Office Scripts имеет доступ только к книге, а маркер проверки подлинности вошедшего пользователя скрипту не передаётся. Администраторы могут на уровне арендатора или группы решать, разрешено ли использовать Office Scripts вообще и разрешено ли использовать их из Power Automate. Для ИТ-службы, которой непросто удерживать под контролем безопасность макросов, эта управляемость — одно из реальных преимуществ миграции.2

6. Как вести миграцию — инвентаризация, классификация, поэтапный перенос

Практическую миграцию лучше вести в три этапа.

Этап 1: инвентаризация. Составьте список: в каких книгах какие макросы работают и кто за них отвечает. Здесь применима та же процедура, что и при подготовке к отказу от VBScript, поэтому за конкретными шагами обратитесь к отдельной статье «Гид по подготовке VBA и внутренних инструментов к отказу от VBScript». По итогам инвентаризации обычно выясняется, что 20–30% макросов уже не используются, и одно только их исключение из миграции заметно снижает объём работы.

Этап 2: классификация. Распределите оставшиеся макросы по таблице решений из главы 3. Хитрость в том, чтобы дробить макрос не целиком, а по единицам обработки. Макрос «собрать файлы → привести в порядок → отправить письмом» можно разложить на сочетание (3) коннектора, (2) Office Scripts и почтового коннектора. Кандидатами на (1) сохранение как есть или (4) запуск через поток на компьютере становятся только те части, которые после разбиения всё равно зависят от VBA — интерактивный ввод через UserForm, операции с другими приложениями через COM и т. п.

Этап 3: поэтапный перенос. Не переписывайте все макросы сразу — расставьте приоритеты.

  1. Начните с макросов, которые выполняются часто и целиком остаются внутри книги. Здесь и эффект от переноса максимален, и удобно осваивать Office Scripts. VBA и TypeScript — разные языки, но в Office Scripts тоже есть запись действий (Action Recorder), и черновик можно набросать примерно так же, как запись макроса в VBA.2
  2. Дайте перенесённому потоку поработать параллельно с оригиналом и какое-то время сверяйте результаты с версией на VBA. Именно здесь всплывают расхождения из-за перехода на таблицу или из-за различий в формате дат.
  3. То, что решено оставить в VBA, оставляйте под управлением. Зафиксируйте порядок запуска и ответственного, а где возможно — переведите на запуск через поток на компьютере, чтобы оставался журнал выполнения.

Более общий вопрос о будущем VBA и о том, в каких случаях им ещё вполне уместно продолжать пользоваться, разобран в статье «Что такое VBA — ограничения, перспективы, когда стоит заменить и как мигрировать», а сравнение подходов для переноса формирования отчётов на .NET — в статье «Как построить вывод отчётов Excel: COM / Open XML / шаблоны». Если же вы рассматриваете управление Excel из .NET через COM, там есть классическая проблема остающегося в памяти процесса, поэтому стоит также заглянуть в статью «Почему после работы с Excel из C# остаётся EXCEL.EXE — освобождение COM-ссылок и решение о замене».

7. Итог

Ответ на вопрос «можно ли перенести VBA в Power Automate» звучит так: «макрос целиком перенести нельзя, но если разбить обработку на части, для большей её части место находится».

Обработку, которая целиком остаётся внутри книги, переводят на Office Scripts и вызывают из облачного потока; простые операции со строками отдают напрямую коннектору; всё, что связано с другими приложениями или UserForm, либо оставляют в VBA, либо продлевают через поток на компьютере; большие объёмы данных и сложную логику относят к .NET. Если такую сортировку провести заранее, миграцию не нужно делать одним рывком: можно двигаться постепенно, начиная с самых часто используемых макросов.

И наоборот: если сортировку пропустить и сразу начать «переписывать всё на Office Scripts», работа быстро упрётся в стену событий и UserForm, лимиты 5 МБ и 120 секунд и требование обязательной таблицы. Успех миграции определяется не мастерством переписывания кода, а тем, насколько тщательно проведены инвентаризация и классификация до её начала. Относиться к наработкам на VBA не как к «тому, что рано или поздно выбросят», а как к «тому, что нужно разобрать и использовать», в итоге оказывается самым дешёвым подходом.

Похожие статьи

Смежные области консультирования

KomuraSoft LLC (合同会社小村ソフト) занимается инвентаризацией существующих бизнес-процессов на Excel/VBA и проектированием поэтапного переноса на Power Automate, Office Scripts и .NET с опорой на уже накопленные наработки.

Справочные ссылки

  1. Microsoft Learn, How to use macro-enabled files in Power Automate flows. О том, что макросы внутри файлов .xlsm нельзя запустить из Power Automate (доступны только Office Scripts), что .xlsm можно выбрать через файловый браузер только в действии Run script, а также о файлах с элементами ActiveX и элементами управления формы, которые иногда не работают.  2

  2. Microsoft Learn, Differences between Office Scripts and VBA macros. О том, что Office Scripts работает только с Excel и имеет доступ только к книге, что события не поддерживаются, что COM/OLE доступны только в VBA, что для Office Scripts нужна коммерческая или образовательная лицензия, тогда как VBA входит в настольный Excel по умолчанию, а также о различиях в записи действий и средствах контроля безопасности.  2 3 4 5 6 7 8 9 10

  3. Microsoft Learn, Differences between Office Scripts and Office Add-ins. О том, что Office Scripts может взаимодействовать только с книгой, а для диалогов и собственных элементов интерфейса требуются надстройки Office.  2

  4. Microsoft Learn, Excel Online (Business) - Connectors reference. О максимальном размере файла в 25 МБ, лимите запроса в 5 МБ, лимите List rows по умолчанию в 256 строк с пагинацией, лимите возвращаемых столбцов по умолчанию в 500, лимитах Run script в 3 вызова за 10 секунд и 1600 в сутки, блокировке файла до 6 минут после последнего использования, задержке появления записи до 30 секунд, троттлинге в 100 вызовов за 60 секунд на подключение, отсутствии поддержки одновременного редактирования и поддерживаемых форматах файлов.  2 3 4 5 6 7

  5. Microsoft Learn, Run macros on an Excel workbook. О запуске макроса VBA через действие Run Excel macro потока на компьютере и о необходимости параметров «Nest under a new Excel process» / «Load add-ins and macros» в Launch Excel для запуска макроса из PERSONAL.XLSB.  2 3

  6. Microsoft Learn, Platform limits and requirements with Office Scripts. О перечне необходимых лицензий и требовании OneDrive for Business, поддерживаемых платформах (Excel on the web / Windows версии 2210+ / Mac), лимите запроса и ответа в 5 МБ, лимите диапазона в 5 миллионов ячеек, лимите Run script в 1600 вызовов в сутки, тайм-ауте в 120 секунд, лимите параметров в 30 000 000 байт, сбое внешних вызовов API (fetch) при запуске через Power Automate и о том, что персональная и домашняя версия находится в предварительной версии.  2 3 4 5 6 7 8 9 10 11 12

  7. Microsoft Learn, Run Office Scripts with Power Automate. О действиях Run script / Run script from SharePoint library, о необходимости бизнес-лицензии Microsoft 365 для использования Office Scripts в Power Automate, а также о том, что E1 и F3 позволяют запускать скрипты через Power Automate, но не дают доступ к собственной интеграции Excel.  2 3

  8. Microsoft Learn, Guidance: Migrate from classic workflows to Power Automate flows in SharePoint. О том, что универсальное HTTP-действие Power Automate относится к премиум-коннекторам. 

  9. Microsoft Learn, Trigger desktop flows from cloud flows. О предварительных условиях запуска потока на компьютере из облачного потока (зарегистрированная машина, подключение потока на компьютере и лицензия, соответствующая режиму выполнения).  2

  10. Microsoft Learn, A failed license check on a desktop flow run. О том, что для запуска потока на компьютере с участием пользователя владельцу подключения нужна пользовательская лицензия Power Automate Premium, а для запуска без участия пользователя — надстройка Unattended RPA или лицензия Power Automate Process.  2

  11. Microsoft Learn, Office Scripts in Excel. О том, что собственная функция расписания скриптов в Excel временно отключена и вместо неё рекомендуется строить расписание как поток Power Automate (по состоянию на июль 2026). 

  12. Microsoft Learn, Tutorial: Create and format an Excel table. О том, что операции записывают со вкладки Excel «Automate» через «New Script» > «Create from Recording»; если вкладки Automate не видно, проверяют переполнение ленты и требования платформы; после записи открывают редактор кода через «Edit» в панели сведений и правят получившееся — это путь «сначала записать, потом править». На той же странице есть пример, где сразу после записи лист берут через workbook.getActiveWorksheet()

Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.

Эти страницы показывают тему статьи в более широком контексте услуг и решений.

Статья напрямую связана со следующими услугами.

Частые вопросы

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

Можно ли запустить существующий макрос VBA напрямую из Power Automate?
Из облачного потока — нет. Коннектор Excel Online (Business) умеет работать с самим файлом .xlsm, но не может выполнить макросы внутри него: запускать оттуда можно только Office Scripts. В потоке на компьютере (Power Automate for desktop) есть действие Run Excel macro, которое запускает VBA-макрос книги, открытой через Launch Excel, в том виде, в каком он есть. Если нужно автоматизировать только запуск, не меняя код VBA, реалистичный вариант — через поток на компьютере.
Является ли Office Scripts полноценной заменой VBA?
Нет. Office Scripts работает только с Excel и не управляет другими приложениями Office, такими как Word или Outlook. Скрипт имеет доступ только к книге, поэтому недоступны локальные файлы, интеграция через COM/OLE, событийная модель вроде Workbook_Open и собственные диалоги на базе UserForm. Зато обработку, которая целиком остаётся внутри книги, — форматирование, сводку, перенос данных — можно перевести на Office Scripts и запускать по расписанию или по событию (письмо, форма) через Power Automate. Это не замена одного другим: у них разные области применения.
Какая лицензия нужна для Office Scripts?
Коммерческая или образовательная лицензия Microsoft 365 (Office 365 Business / Business Premium / ProPlus / E1 / E3 / E5 / F3 / A3 / A5) и OneDrive for Business. Чтобы запускать Office Scripts из Power Automate, тоже нужна бизнес-лицензия Microsoft 365; лицензии E1 и F3 позволяют запускать скрипты через Power Automate, но не дают доступ к интеграции Power Automate внутри самого Excel. Это отличается от VBA, который входит в настольный Excel без дополнительной лицензии, поэтому лицензирование стоит проверить ещё до решения о миграции.
Можно ли автоматизировать всё одним коннектором Excel Online (Business), без скриптов?
Для простой обработки — да, но ограничений много. Добавление, получение, обновление и удаление строк рассчитаны на диапазон, оформленный как таблица (ListObject); действие List rows present in a table по умолчанию возвращает не более 256 строк, и чтобы получить все строки, нужно включить пагинацию. Размер файла — до 25 МБ, один запрос — до 5 МБ, а запись может стать видна с задержкой до 30 секунд. На практике удобно разделять: чтение и запись нескольких строк таблицы — напрямую через коннектор, формат ячеек и обработка нескольких листов — через Office Scripts.

Об авторе

Страница с профилем автора статьи.

Го Комура

Представитель KomuraSoft LLC

Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.

Публичные ссылки

Вернуться в блог