Migrar macros VBA de Excel a Power Automate — qué reemplazar con Office Scripts y qué mantener en VBA

· Actualizado el: · · Power Automate, VBA, Excel, Office, Office Scripts, Automatización de procesos empresariales, Flujo de nube, Aprovechamiento de activos existentes, Migración, Consultoría técnica

«Este proceso funciona con una macro de Excel, pero la persona que la creó ya no está en la empresa. ¿Se puede migrar eso a Power Automate?» — recibo esta consulta con frecuencia. Mientras que agregaciones diarias y generación de informes construidos en VBA siguen funcionando en producción, muchos responsables sienten inquietud por el futuro de sus activos VBA a raíz de la salida del autor original o de las noticias sobre la desaparición de VBScript.

Adelantando la conclusión: «migrar VBA a Power Automate» es, en realidad, la combinación de varias cosas distintas: «reescribir una parte de VBA como Office Scripts y llamarla desde Power Automate», «sustituir otra parte con un conector» y «dejar el resto tal cual en VBA». No existe ningún mecanismo que ejecute una macro VBA sin cambios dentro de un flujo de nube. En este artículo organizamos, apoyándonos en fuentes primarias de Microsoft Learn, qué procesos pueden migrarse y a dónde, y cuáles conviene dejar en VBA.

1. La conclusión, primero

  • No es posible ejecutar una macro VBA directamente desde un flujo de nube de Power Automate. El conector Excel Online (Business) puede manejar archivos .xlsm, pero no puede ejecutar las macros que contienen: lo único ejecutable es Office Scripts.1
  • Office Scripts no es un sustituto completo de VBA. Es exclusivo de Excel: no permite operar otras aplicaciones de Office, no tiene programación dirigida por eventos, ni UserForm, ni integración COM/OLE, ni acceso a archivos locales.23
  • En cambio, los procesos que se completan dentro del propio libro —dar formato, agregar datos, transcribir— tienen mucho valor al convertirse a Office Scripts. Combinado con Power Automate, se puede ejecutar automáticamente mediante programación o al recibir un correo como disparador, logrando una «automatización que funciona sin abrir Excel», algo imposible con VBA.2
  • Si solo se trata de agregar u obtener filas en una tabla, se puede procesar directamente con las acciones del conector Excel Online (Business) sin escribir ninguna secuencia de comandos. No obstante, confirme antes las limitaciones: es obligatorio usar una tabla, el límite predeterminado es de 256 filas y el tamaño máximo es de 25 MB.4
  • Para los procesos en los que VBA resulta imprescindible, existe la opción de iniciar el VBA existente tal cual con la acción Run Excel macro de un flujo de escritorio. Así se puede automatizar solo el inicio y la integración antes/después sin modificar el código VBA.5
  • Office Scripts requiere una licencia comercial o educativa de Microsoft 365 y OneDrive for Business. Como VBA no necesita ninguna licencia adicional, este punto es una condición previa a considerar antes de decidir la migración.62

2. Cómo se relacionan VBA, Office Scripts y Power Automate

Primero, aclaremos quién es quién. Hay muchos nombres parecidos, y ahí está el origen de la confusión.

Relación entre VBA, Office Scripts y Power AutomateDiagrama que muestra el lado de la nube (flujo de nube, conector Excel Online Business y Office Scripts operando sobre una tabla de Excel) y el lado de escritorio (flujo de escritorio ejecutando una macro VBA existente), junto con la llamada del flujo de nube al flujo de escritorio y la ubicación de los libros que usa cada unoLado de escritorioLado de la nubeRun scriptagregar/obtener/actualizar filasRun Excel macrollamadaPower Automate -- flujo de escritorioMacro VBA existentePower Automate -- flujo de nubeConector Excel Online (Business)Office Scripts -- opera Excel con TypeScriptTabla de ExcelLibro en OneDrive / SharePointLibro en servidor local/de archivos
  • Office Scripts es una función de secuencias de comandos que opera Excel mediante TypeScript. Funciona en Excel Web, Excel para Windows (versión 2210 en adelante) y Excel para Mac, y se puede invocar desde un flujo de nube de Power Automate. La diferencia fundamental con VBA es que VBA está pensado para el escritorio, mientras que Office Scripts está diseñado para la nube y para funcionar en varias plataformas.26
  • El conector Excel Online (Business) es el conector que permite operar, desde un flujo de nube, archivos de Excel guardados en OneDrive for Business o SharePoint. Cuenta con acciones para operar filas de una tabla y con la acción «Ejecución de la secuencia de comandos (Run script)», que ejecuta Office Scripts.7
  • El flujo de escritorio (Power Automate for desktop) es una herramienta de RPA que opera aplicaciones en Windows. Entre sus acciones de Excel hay una que ejecuta macros VBA.5

Lo que VBA puede hacer y Office Scripts no

Este es el punto más importante para decidir la migración. Lo organizamos con base en el artículo de Microsoft Learn «Differences between Office Scripts and VBA macros».2

Lo que VBA puede hacer Cómo lo maneja Office Scripts
Operar aplicaciones de Office distintas de Excel, como Word, Outlook o Access No es posible. Office Scripts es exclusivo de Excel y no se puede usar en otras aplicaciones de Office
Integración con otras aplicaciones o componentes externos mediante COM/OLE, llamadas a la API de Win32 (Declare) No es posible. La secuencia de comandos solo puede acceder al libro, no a la máquina host
Programación dirigida por eventos como Workbook_Open o Worksheet_Change No es posible. Los eventos a nivel de Excel no son compatibles; solo se puede ejecutar manualmente o mediante una llamada desde Power Automate
Cuadros de diálogo o pantallas de entrada propias mediante UserForm No es posible. Si se necesita una interfaz fuera del libro (cuadros de diálogo o paneles de tareas), eso corresponde al ámbito de los complementos de Office3
Operaciones de archivos en carpetas locales (abrir, guardar, listar) No es posible. Los procesos que salen del libro se realizan con conectores del lado de Power Automate (OneDrive, SharePoint, etc.)
Una amplia gama de funciones de Excel, incluidas las exclusivas de la versión de escritorio Parcialmente no es posible. VBA cubre un rango más amplio de funciones de Excel; Office Scripts está pensado para cubrir casi todos los escenarios de Excel en la web

También hay que prestar atención a las llamadas a servicios web externos. Office Scripts admite de forma limitada llamadas externas, pero si se ejecuta a través de Power Automate, las llamadas a API externas (fetch) desde dentro de la secuencia de comandos fallan. El diseño previsto es que la integración externa se realice no dentro de la secuencia de comandos, sino con los conectores o acciones HTTP del lado del flujo.26 Sin embargo, la acción HTTP genérica que llama a cualquier API se considera un conector premium, por lo que no se puede usar solo con la licencia de Microsoft 365.8 Si el servicio con el que desea integrarse cuenta con un conector estándar, priorícelo; y si es imprescindible llamar a una API propia, incorpore el costo adicional de la licencia premium a la decisión de migración.

Al ver esta lista, es probable que muchos piensen «casi toda nuestra macro cae en alguno de estos casos». En efecto, las macros VBA que han crecido durante años suelen incluir envío de correo desde Outlook, recorrido de carpetas y recepción de entradas mediante UserForm. Pero antes de rendirse, intente descomponer el proceso. Si la macro es del tipo «recopilar archivos de una carpeta, dar formato al libro y enviarlo por correo», hay bastantes casos en los que la recopilación de archivos y el envío de correo son tareas en las que los conectores de Power Automate destacan, y basta con convertir solo el formateo del libro a Office Scripts para que el conjunto pueda migrarse.

Una idea de la reescritura — comparar una macro de totales

Como con solo palabras es difícil hacerse una idea de la distancia entre ambos, veamos un ejemplo mínimo en paralelo: un proceso que simplemente suma la columna C de la hoja «Ventas» (desde la fila 2 en adelante) y escribe el resultado en E1.

En VBA se escribiría así.

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

Lo mismo escrito en Office Scripts (TypeScript) queda así.

function main(workbook: ExcelScript.Workbook): number {
  const sheet = workbook.getWorksheet("売上");
  const used = sheet.getUsedRange();

  // getRowIndex empieza en 0, así que al sumar el número de filas se obtiene la última fila empezando en 1
  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; // valor de retorno que el flujo puede recibir
}

El número de líneas aumenta, pero lo que cuesta no es la sintaxis, sino las siguientes cuatro diferencias de enfoque.

Lo habitual en VBA En Office Scripts
Se puede crear cualquier cantidad de Sub y ejecutar cualquiera de ellos El único punto de entrada es la función main; es la que se invoca
ActiveSheet y Selection permiten usar implícitamente «lo que se está viendo ahora» No existe el concepto de selección; siempre hay que obtener la hoja por nombre, como en workbook.getWorksheet("売上")
Application.WorksheetFunction permite tomar prestadas funciones de hoja de cálculo No se pueden tomar prestadas; hay que extraer los valores en un arreglo y calcular uno mismo
El resultado se escribe en una celda o se muestra con MsgBox Con return se puede devolver el valor al flujo; las notificaciones o el envío de correo quedan a cargo de los conectores del lado del flujo

Lo que devuelve getValues() es un arreglo bidimensional de tipo (string | number | boolean)[][], y el contenido de una celda puede ser una cadena de texto. Es necesario descartar uno mismo, con typeof, los valores no numéricos que Sum de VBA omitía en silencio; esta sensación de que «lo que antes se hacía de forma implícita ahora hay que hacerlo explícito» constituye la mayor parte de la diferencia que se percibe al reescribir.

Otro punto: en Office Scripts, lo básico es no leer ni escribir celda por celda, sino obtener el rango de una sola vez y procesarlo como un arreglo. En VBA también se decía que las iteraciones celda por celda eran lentas, pero en Office Scripts esto afecta directamente a los límites de tamaño de solicitud/respuesta y al tiempo de ejecución (capítulo 4).

3. Tabla de decisión — cinco opciones según el caso de uso

El destino de la migración no se limita a «convertir a Office Scripts». En la práctica, conviene pensar en estas cinco opciones.

Opción Casos adecuados Requisitos y restricciones
(1) Dejarlo tal cual en VBA Trabajo manual de una persona o un equipo pequeño. Cuando UserForm, eventos o integración con otras aplicaciones son esenciales, y el responsable no tiene problema en estar presente en la ejecución No requiere licencia adicional.2 Aunque hay que gestionar mediante el inventario los riesgos de dependencia de una persona y de macros sin control
(2) Convertir a Office Scripts y ejecutar desde un flujo de nube Formato, agregación o transcripción que se completa dentro del libro. Cuando se quiere disparar por programación o por recepción de correo/formulario. El libro puede colocarse en OneDrive/SharePoint Requiere licencia comercial/educativa de Microsoft 365.6 Los eventos, UserForm, etc. necesitan rediseñarse
(3) Procesar directamente con el conector Excel Online (Business) Procesos simples de solo agregar, obtener, actualizar o eliminar filas de una tabla. Por ejemplo, «agregar las respuestas de un formulario a Excel» Se presupone que el rango objetivo es una tabla. Existen límites como 256 filas por defecto y un máximo de 25 MB4
(4) Iniciar el VBA existente tal cual desde un flujo de escritorio No hay margen para reescribir el VBA, pero se quiere automatizar solo el inicio y el procesamiento previo/posterior (colocación de archivos, notificaciones). El libro está en un servidor de archivos interno Requiere una máquina Windows. Iniciarlo desde un flujo de nube requiere la licencia Power Automate Premium del propietario de la conexión (para ejecución desatendida, licencia Process)910
(5) Reescribirlo en .NET Procesamiento de grandes volúmenes de datos, lógica de negocio compleja, cuando son imprescindibles las pruebas automatizadas o el control con Git, o cuando el objetivo principal es la generación de informes El costo de desarrollo es el más alto. Pero la mantenibilidad a largo plazo y el rendimiento son los mejores. Los informes se pueden generar independientes de Excel con Open XML u otras herramientas

Cuál elegir queda determinado, en general, por el siguiente flujo.

Árbol de decisión para elegir el destino de migraciónDiagrama de flujo que, partiendo de una macro VBA, pregunta si el proceso se completa dentro del libro, si la parte externa a Excel puede sustituirse con un conector, si el libro puede colocarse en OneDrive o SharePoint, si basta con operaciones de fila en una tabla y si hay margen para reescribir el VBA, y deriva hacia Office Scripts, el conector Excel Online Business, un flujo de escritorio que inicia el VBA existente o una reescritura en .NETNoSe puedeNo se puede (operación de UI de otra app / integración COM)Se puedeBastaHay formato/varias hojas/lógicaNo se puede (limitado a servidor interno)No hayHay margen / se necesita rendimiento o pruebasElegir una macro VBA¿El proceso se completa dentro del libro?¿La parte fuera de Excel se puede sustituir con un conector? (envío de correo, recolección de archivos, etc.)Dividir el proceso: parte de Excel → Office Scripts, el resto → conector del flujo¿Hay margen para reescribir el VBA?¿Se puede colocar el libro en OneDrive/SharePoint?¿Basta con operaciones de fila en una tabla?Procesar directamente con el conector Excel Online (Business)Convertir a Office Scripts y ejecutar con Run scriptIniciar el VBA tal cual con un flujo de escritorioReescribir en .NET

Conviene tener presente que la opción (4) no es un «punto final de la migración», sino una medida para prolongar la vida útil. Los problemas de dependencia de una persona y de control de versiones del propio VBA siguen sin resolverse. Aun así, resulta suficientemente práctica como estrategia para ganar tiempo: «automatizar primero el inicio para eliminar los errores humanos de ejecución, y mientras tanto migrar el contenido del VBA de forma gradual hacia Office Scripts o .NET».

4. Patrones de implementación — la acción Run script y los límites del conector

Ejecución de la secuencia de comandos (Run script)

Para ejecutar Office Scripts desde un flujo de nube se usan dos acciones del conector Excel Online (Business): Run script es para secuencias de comandos guardadas en OneDrive (la ubicación predeterminada), y Run script from SharePoint library es para las guardadas en una biblioteca de SharePoint del equipo.7

Una configuración típica sería la siguiente.

  1. Disparador: programación (Recurrence), recepción de correo, envío de formulario, etc.
  2. Identificar el libro objetivo con el conector de OneDrive/SharePoint
  3. Ejecutar Office Scripts con Run script y recibir el valor de retorno
  4. Usar el valor de retorno para enviar una notificación de Teams o un correo

Como la secuencia de comandos puede recibir parámetros y devolver valores, se puede intercambiar datos, por ejemplo «pasar una clave de búsqueda desde el flujo, hacer que devuelva los datos correspondientes dentro del libro y convertirlos en correo del lado del flujo». Cabe señalar que la función «ejecución programada de secuencias de comandos» que existía del lado de Excel está deshabilitada temporalmente al momento de escribir este artículo (julio de 2026), y se recomienda montar la ejecución programada mediante un flujo de Power Automate.11

Grabar, ajustar e incorporar al flujo

No hace falta escribir TypeScript desde cero. Se puede seguir el mismo enfoque de «grabar y luego corregir» que se usa con la grabadora de macros de VBA. Los pasos reales son estos.12

  1. Grabar. Abra el libro objetivo en Excel (versión web o Windows), seleccione en la pestaña «Automatizar (Automate)» de la cinta «Nueva secuencia de comandos (New Script)» > «Crear a partir de una grabación (Create from Recording)», realice de principio a fin las operaciones habituales y deténgala. Si no encuentra la pestaña «Automatizar», revise el desbordamiento de la cinta (la flecha hacia abajo). Si aun así no aparece, no se cumplen las condiciones de licencia o de plataforma (capítulo 5).
  2. Leer el contenido. Al terminar la grabación se abre el panel de detalles; abra el editor de código con «Editar (Edit)». Ahí se ve en qué llamadas a getRange o setValue se convirtió cada operación. Igual que con la grabadora de macros de VBA, aparece código que simplemente enumera los resultados de las operaciones.
  3. Ajustar. Como solo se puede grabar la operación en sí, hay que agregar uno mismo las bifurcaciones condicionales, los bucles y la forma de recibir el nombre de la hoja. El código recién grabado suele tomar «la hoja que estaba abierta en ese momento» con getActiveWorksheet, y si se ejecuta sin supervisión desde el flujo, terminará afectando a una hoja no deseada. Corregir esto para tomar la hoja por nombre, como en getWorksheet("売上"), es el primer ajuste que conviene hacer.
  4. Incorporarla al flujo. Como la secuencia de comandos se guarda en OneDrive (o en una biblioteca de SharePoint), agregue la acción «Ejecución de la secuencia de comandos (Run script)» del lado del flujo de nube y seleccione el libro y la secuencia de comandos guardada. Si agrega parámetros a main en la secuencia de comandos, aparecerán campos de entrada adicionales en la acción, y podrá pasar valores desde el flujo.

Recorrer este ciclo de «grabar → ajustar → incorporar» de principio a fin es un atajo más rápido para entenderlo que mirar solo la tabla de decisión. Hacerlo una vez con la macro más simple de las que se van a migrar mejora la precisión de la clasificación del capítulo 3.

Confirme antes los valores límite

La trampa más común al migrar desde VBA son los límites propios de la ejecución en la nube. Los topes que prácticamente no existían en el VBA de escritorio aquí están claramente presentes.

No hace falta memorizar toda la lista. Los tres límites que conviene confirmar primero, en el orden en que se suelen encontrar en la práctica, son estos.

  1. El tiempo de espera de 120 segundos para el procesamiento sincrónico. Un «cálculo de totales que en VBA tardaba 3 minutos» fallará si se traslada tal cual. Antes de migrar, mida al menos una vez el tiempo que tarda la macro actual. Este es el límite con el que se topa primero, y también con el que más se topa.
  2. Los 5 MB por solicitud/respuesta. Si se escribe código que «obtiene toda la hoja con getValues», se supera fácilmente este límite en libros con muchas filas. Es necesario diseñar el proceso para limitarse a las columnas/filas necesarias o dividirlo en partes.
  3. El tamaño de archivo de 25 MB que puede manejar el conector. Esto no se puede evitar con la forma de escribir el código. Si el propio libro supera los 25 MB, en ese momento desaparece la opción del lado de la nube, y queda pasar por un flujo de escritorio o por .NET.

Dicho de otro modo, si el proceso «termina en menos de un minuto», maneja «unas pocas miles de filas» y el libro tiene «unos pocos MB», se puede avanzar casi sin preocuparse por la tabla siguiente.

Límite Valor Fuente
Tamaño de una solicitud/respuesta de Office Scripts Máximo 5 MB 6
Número de celdas de un rango (Range) Máximo 5 millones de celdas 6
Número de llamadas a Run script 1600 veces al día por usuario, y como máximo 3 veces cada 10 segundos 64
Tiempo de espera del procesamiento sincrónico 120 segundos 6
Tamaño de los parámetros pasados a Run script Máximo 30 000 000 bytes (unos 28.6 MB) 6
Tamaño del archivo de Excel que puede manejar el conector Máximo 25 MB 4
Tamaño de una solicitud del conector Máximo 5 MB 4
Llamadas a la API del conector 100 veces cada 60 segundos por conexión 4

Si va a operar tablas directamente con el conector Excel Online (Business), confirme además los siguientes puntos.4

  • Las operaciones de fila presuponen una tabla. Acciones como «Agregar una fila a una tabla (Add a row into a table)» o «Obtener una fila (Get a row)» están diseñadas para especificar una tabla (ListObject); no pueden aplicarse a datos escritos simplemente en un rango de celdas. Las «hojas donde se empezó a escribir libremente desde la celda A1» de la época de VBA necesitan convertirse en tabla antes de migrar.
  • List rows present in a table solo devuelve, de forma predeterminada, hasta 256 filas. Para obtener todas las filas hay que habilitar la configuración de paginación. Las columnas que se pueden obtener también están limitadas de forma predeterminada a las primeras 500.
  • La escritura puede tardar hasta unos 30 segundos en reflejarse. Además, el archivo puede quedar bloqueado hasta 6 minutos después de usar el conector.
  • No se admite la escritura simultánea desde varios clientes. Escribir desde el flujo en un libro que se ha dejado abierto en Excel de escritorio, por ejemplo, es motivo de conflictos e inconsistencias.
  • Los formatos admitidos son .xlsx y .xlsb (libro binario). El .xlsm solo se puede seleccionar desde el explorador de archivos en la acción Run script; para usarlo en otras acciones hay que especificar el ID del archivo. No obstante, como se mencionó antes, las macros VBA que contiene no se ejecutan. Un .xlsm que incluya controles ActiveX o controles de formulario puede no funcionar con el conector, por lo que es imprescindible verificarlo de antemano.1

Si se reescribe tal cual en Office Scripts una «macro que cada noche agrega cientos de miles de filas», chocará de lleno con el límite de 5 MB y el tiempo de espera de 120 segundos. Para esta escala, es más sano destinarla desde el principio a .NET (opción 5).

Iniciar VBA desde un flujo de escritorio

Si se decide dejar el VBA tal cual, se abre el libro con Launch Excel de un flujo de escritorio y se ejecuta especificando el nombre de la macro (los argumentos separados por punto y coma) con la acción Run Excel macro. Para usar una macro del libro de macros personal (PERSONAL.XLSB), hay que habilitar en la configuración avanzada de Launch Excel las opciones «Colocar bajo un nuevo proceso de Excel (Nest under a new Excel process)» y «Cargar complementos y macros (Load add-ins and macros)».5

Para iniciar un flujo de escritorio desde un flujo de nube se necesita registrar la máquina y una conexión de flujo de escritorio; en la ejecución con supervisión, el propietario de la conexión necesita la licencia de usuario Power Automate Premium, y en la ejecución desatendida la máquina necesita la licencia Power Automate Process (o el antiguo complemento Unattended RPA).910 El diseño general de los flujos de escritorio, incluido el manejo de errores y los requisitos previos de la ejecución desatendida, lo tratamos en detalle en otro artículo: «Automatizar procesos con Power Automate — cómo elegir entre flujo de nube y de escritorio, y diseño del manejo de errores».

5. Licencias y condiciones previas

Conviene confirmar, en una etapa temprana de la decisión de migración, que Office Scripts no es «una función gratuita incluida con Excel».

  • Para usar o crear Office Scripts se necesita una licencia de suscripción comercial o educativa de Microsoft 365 (Office 365 Business / Business Premium / ProPlus / ProPlus for Devices / A3 / A5 / E1 / E3 / E5 / F3) y OneDrive for Business. También son condiciones previas tener habilitados los enlaces para compartir dentro de la organización y una conexión a internet con las experiencias conectadas habilitadas.6
  • Usar Office Scripts desde Power Automate también requiere una licencia empresarial de Microsoft 365. E1 y F3 permiten ejecutar la secuencia de comandos vía Power Automate, pero no pueden usar la integración de Power Automate dentro de Excel (como la función «Automatizar tareas» de Excel).7
  • Office Scripts en Microsoft 365 para uso personal o familiar está, al momento de escribir este artículo (julio de 2026), en fase de vista previa y requiere participar en el programa Microsoft 365 Insider. No se puede dar por sentado para uso empresarial.6
  • Del lado del cliente, funciona en Excel on the web, Excel for Windows (versión 2210 en adelante) y Excel for Mac.6
  • Por su parte, VBA viene integrado en la versión de escritorio de Excel y no requiere ninguna licencia especial.2

Las condiciones de licencia anteriores corresponden al momento de escribir este artículo (julio de 2026). Como los planes aplicables y las condiciones previas pueden revisarse, confirme las condiciones más recientes en Microsoft Learn (ver las notas al pie) antes de tomar la decisión de implementación.

Es decir, en un entorno donde «el Excel de la empresa es una licencia perpetua (de pago único) y no se tiene contratado Microsoft 365», la opción de Office Scripts ni siquiera existe. En ese caso, el destino de la migración se reduce a la automatización del inicio vía flujo de escritorio o a la reescritura en .NET.

También vale la pena tener presente la diferencia en materia de seguridad. Una macro VBA se ejecuta con los mismos permisos que Excel, por lo que puede acceder a todo el escritorio, mientras que Office Scripts solo puede acceder al libro, y ni siquiera se le pasa el token de autenticación del usuario que inició sesión. Los administradores pueden controlar, por inquilino o por grupo, si se permite el uso de Office Scripts y si se permite su uso con Power Automate. Para los departamentos de sistemas que han tenido dificultades gestionando la seguridad de las macros, esta facilidad de control es una de las ventajas de la migración.2

6. Cómo avanzar con la migración — inventario, clasificación y migración por etapas

Recomendamos avanzar con la migración real en las siguientes tres etapas.

Etapa 1: inventario. Elabore una lista de en qué libro, qué macros y bajo la responsabilidad de quién están funcionando. Se puede usar el mismo procedimiento que para la preparación ante la desaparición de VBScript, así que consulte el otro artículo «Guía de inspección de VBA y herramientas internas ante la desaparición de VBScript» para el procedimiento concreto. Es habitual encontrar, al hacer el inventario, que entre un 20 % y un 30 % de las macros «ya no se usan»; con solo excluirlas del alcance de la migración se reduce el volumen de trabajo.

Etapa 2: clasificación. Aplique la tabla de decisión del capítulo 3 a las macros restantes. En este punto, el truco está en descomponer no macro por macro, sino por proceso. Una macro de «recolectar archivos → dar formato → enviar por correo» se puede descomponer en la combinación de (3) el conector + (2) Office Scripts + el conector de correo. Solo la parte que, incluso después de descomponer, sigue dependiendo de VBA (entrada interactiva mediante UserForm, operaciones COM con otras aplicaciones, etc.) queda como candidata a (1) dejarla tal cual o (4) pasar por un flujo de escritorio.

Etapa 3: migración por etapas. En lugar de reescribir todas las macros de golpe, establezca prioridades.

  1. Empiece por las macros con mayor frecuencia de ejecución que se completan dentro del libro. El efecto de la migración es grande y también sirve para familiarizarse con Office Scripts. Aunque VBA y TypeScript son lenguajes distintos, Office Scripts también tiene un grabador de acciones (Action Recorder), con el que se puede crear un primer borrador con la misma sensación que la grabadora de macros de VBA.2
  2. Ejecute en paralelo el flujo migrado y establezca un período para contrastar los resultados con la versión en VBA. Las diferencias causadas por la conversión a tabla o por el formato de fecha se detectan aquí.
  3. Lo que se decida dejar en VBA, «déjelo gestionado». Aclare el procedimiento de ejecución y quién es responsable, y, de ser posible, acérquelo al inicio mediante flujo de escritorio para dejar un registro de ejecución.

El futuro de VBA en general, y el criterio sobre cuándo tiene sentido seguir usándolo, están reunidos en «Qué es VBA - limitaciones, futuro, casos que conviene reemplazar y patrones realistas de migración»; la comparación de métodos para cuando se decide llevar la generación de informes hacia .NET está en «Cómo generar informes de Excel - COM/Open XML/plantillas». Además, si opta por una configuración en la que .NET controla Excel mediante COM, existe el problema clásico de que el proceso queda residente, así que revise también «El problema de EXCEL.EXE que permanece al operar Excel desde C# — patrones de liberación de referencias COM y criterio de reemplazo».

7. Resumen

La respuesta a «¿se puede migrar de VBA a Power Automate?» es: «no se puede trasladar la macro completa tal cual, pero si se descompone el proceso, la mayor parte tiene un destino de migración».

Los procesos que se completan dentro del libro se convierten a Office Scripts y se llaman desde un flujo de nube; las operaciones simples de fila se dejan directamente al conector; las partes que involucran integración con otras aplicaciones o UserForm se dejan en VBA o se prolongan vía flujo de escritorio; y los datos masivos o la lógica compleja se destinan a .NET. Con solo hacer esta clasificación al principio, la migración no necesita hacerse de golpe, y se puede avanzar poco a poco, empezando por las macros de mayor frecuencia.

Por el contrario, si se empieza sin clasificar, con la idea de «reescribirlo todo en Office Scripts», se chocará sucesivamente con la barrera de los eventos y UserForm, los límites de 5 MB y 120 segundos, y la restricción de que se requiere una tabla, y el proyecto se estancará. El éxito o el fracaso de la migración se decide, más que por la habilidad para reescribir, casi por completo por el inventario y la clasificación previos al inicio. Tratar los activos de VBA no como «algo que algún día se descartará», sino como «algo que se clasifica y se aprovecha», resulta, al final, lo más económico.

Artículos relacionados

Áreas de consultoría relacionadas

En KomuraSoft LLC atendemos consultas partiendo de aprovechar los activos existentes, desde el inventario de los procesos actuales que funcionan con Excel/VBA hasta el diseño de una migración por etapas hacia Power Automate, Office Scripts o .NET.

Referencias

  1. Microsoft Learn, How to use macro-enabled files in Power Automate flows. Sobre que las macros dentro de un archivo .xlsm no se pueden ejecutar desde Power Automate y solo Office Scripts es válido, que solo la acción Run script permite seleccionar un .xlsm desde el explorador de archivos, y que los archivos con controles ActiveX o de formulario pueden no funcionar.  2

  2. Microsoft Learn, Differences between Office Scripts and VBA macros. Sobre que Office Scripts es exclusivo de Excel y solo puede acceder al libro, que no admite eventos, que COM/OLE es exclusivo de VBA, que Office Scripts requiere licencia comercial/educativa mientras que VBA viene integrado de forma estándar en la versión de escritorio de Excel, y sobre las diferencias en grabación de operaciones y control de seguridad.  2 3 4 5 6 7 8 9 10

  3. Microsoft Learn, Differences between Office Scripts and Office Add-ins. Sobre que Office Scripts solo puede interactuar con el libro, y que si se necesitan cuadros de diálogo o controles de interfaz propios, se requiere un complemento de Office.  2

  4. Microsoft Learn, Excel Online (Business) - Connectors reference. Sobre el tamaño máximo de archivo de 25 MB, el límite de 5 MB por solicitud, el límite predeterminado de 256 filas en List rows y la paginación, el límite predeterminado de 500 columnas obtenidas, el límite de 3 llamadas cada 10 segundos y 1600 al día para Run script, el bloqueo del archivo hasta 6 minutos tras el último uso, el retraso de hasta 30 segundos en reflejar la escritura, el límite de 100 llamadas cada 60 segundos por conexión, la falta de compatibilidad con edición simultánea y los formatos de archivo admitidos.  2 3 4 5 6 7

  5. Microsoft Learn, Run macros on an Excel workbook. Sobre la ejecución de macros VBA mediante la acción Run Excel macro de un flujo de escritorio, y que ejecutar una macro de PERSONAL.XLSB requiere habilitar las opciones «Nest under a new Excel process» y «Load add-ins and macros» de Launch Excel.  2 3

  6. Microsoft Learn, Platform limits and requirements with Office Scripts. Sobre la lista de licencias requeridas y el requisito de OneDrive for Business, las plataformas compatibles (Excel on the web / Windows versión 2210 en adelante / Mac), el límite de 5 MB por solicitud/respuesta, el límite de 5 millones de celdas por rango, el límite de 1600 llamadas diarias a Run script, el tiempo de espera de 120 segundos, el límite de 30 000 000 bytes para los parámetros, que las llamadas a API externas (fetch) fallan al ejecutarse vía Power Automate, y que la versión personal/familiar está en vista previa.  2 3 4 5 6 7 8 9 10 11 12

  7. Microsoft Learn, Run Office Scripts with Power Automate. Sobre las dos acciones Run script / Run script from SharePoint library, que usar Office Scripts en Power Automate requiere una licencia empresarial de Microsoft 365, y que E1 y F3 pueden ejecutarlo desde Power Automate pero no pueden usar la integración dentro de Excel.  2 3

  8. Microsoft Learn, Guidance: Migrate from classic workflows to Power Automate flows in SharePoint. Sobre que la acción HTTP genérica de Power Automate es un conector premium. 

  9. Microsoft Learn, Trigger desktop flows from cloud flows. Sobre los requisitos previos para iniciar un flujo de escritorio desde un flujo de nube (máquina registrada, conexión de flujo de escritorio y la licencia correspondiente según el modo de ejecución).  2

  10. Microsoft Learn, A failed license check on a desktop flow run. Sobre que la ejecución con supervisión de un flujo de escritorio requiere la licencia de usuario Power Automate Premium del propietario de la conexión, y que la ejecución desatendida requiere el complemento Unattended RPA o la licencia Power Automate Process.  2

  11. Microsoft Learn, Office Scripts in Excel. Sobre que la función de programación de secuencias de comandos de Excel está deshabilitada temporalmente, y que en su lugar se recomienda la ejecución programada mediante un flujo de Power Automate (información vigente en julio de 2026). 

  12. Microsoft Learn, Tutorial: Create and format an Excel table. Sobre grabar operaciones desde la pestaña «Automate» de Excel con «New Script» > «Create from Recording», revisar el desbordamiento de la cinta o los requisitos de plataforma si no aparece la pestaña Automate, y el enfoque de «grabar y luego editar» abriendo el editor de código con «Edit» en el panel de detalles tras la grabación. La misma página incluye un ejemplo de código recién grabado que obtiene la hoja con workbook.getActiveWorksheet()

Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.

Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.

El artículo está directamente relacionado con los siguientes servicios.

Preguntas frecuentes

Preguntas habituales en las consultas sobre el tema del artículo.

¿Las macros VBA existentes se pueden ejecutar directamente desde Power Automate?
No se pueden ejecutar desde flujos de nube. El conector Excel Online (Business) puede manejar el propio archivo .xlsm, pero no puede ejecutar las macros que contiene: lo único que se puede ejecutar es Office Scripts. En cambio, los flujos de escritorio (Power Automate for desktop) cuentan con la acción Run Excel macro, que permite ejecutar tal cual la macro VBA de un libro abierto con Launch Excel. Si solo desea automatizar el inicio sin modificar el código VBA, pasar por un flujo de escritorio es una opción realista.
¿Office Scripts es un sustituto completo de VBA?
No lo es. Office Scripts es exclusivo de Excel y no puede operar otras aplicaciones de Office como Word u Outlook. Como solo puede acceder al libro, tampoco es posible el acceso a archivos locales ni la integración COM/OLE, y no existen mecanismos dirigidos por eventos como Workbook_Open ni cuadros de diálogo propios mediante UserForm. Por el contrario, los procesos que se completan dentro del propio libro —dar formato, agregar datos, transcribir— sí pueden convertirse a Office Scripts, lo que permite ejecutarlos desde Power Automate mediante programación o eventos que los disparen. Es más preciso pensar que ambos no son sustitutos entre sí, sino que cubren ámbitos distintos.
¿Qué licencia se necesita para usar Office Scripts?
Se necesita una licencia comercial o educativa de Microsoft 365 (Office 365 Business / Business Premium / ProPlus / E1 / E3 / E5 / F3 / A3 / A5) y OneDrive for Business. Para ejecutar Office Scripts desde Power Automate también se requiere una licencia empresarial de Microsoft 365; E1 y F3 permiten la ejecución vía Power Automate, pero no pueden usar la integración de Power Automate dentro de Excel. Esto contrasta con VBA, que viene incluido de forma estándar en la versión de escritorio de Excel sin licencia adicional, por lo que conviene confirmar las licencias de su organización antes de decidir la migración.
¿Basta con el conector Excel Online (Business) para completar la automatización?
Para procesos simples puede bastar, pero hay que tener en cuenta varias limitaciones. Agregar, obtener, actualizar o eliminar filas requiere que el rango esté definido como tabla (ListObject); List rows present in a table devuelve como máximo 256 filas de forma predeterminada y requiere habilitar la paginación para obtener todas. El tamaño de archivo máximo es de 25 MB, cada solicitud tiene un máximo de 5 MB, y la escritura puede tardar hasta 30 segundos en reflejarse. En la práctica conviene usar el conector directamente para lecturas y escrituras de pocas filas en una tabla, y Office Scripts para el formato de celdas o procesos que abarcan varias hojas.

Perfil del autor

Página de presentación del autor del artículo.

Go Komura

Representante de KomuraSoft LLC

Especializado en desarrollo de software para Windows, consultoría técnica e investigación de fallos, sobre todo en proyectos con sistemas existentes y errores difíciles de reproducir.

Volver al blog