Cómo migrar código VBA de Word a office scripts para compatibilidad con la nube
🔍 WiseChecker

Cómo migrar código VBA de Word a office scripts para compatibilidad con la nube

Si tiene macros VBA de Word que automatizan tareas de documentos, solo se ejecutan en la aplicación de escritorio. Office Scripts funciona en Word para la web y en entornos en la nube de Microsoft 365. Este artículo explica las diferencias clave entre VBA y Office Scripts y proporciona un proceso de migración paso a paso. Aprenderá a reescribir patrones comunes de VBA usando la sintaxis de TypeScript en el editor de Office Scripts.

Puntos clave: Migración de macros VBA de Word a Office Scripts

  • VBA vs entorno de ejecución de Office Scripts: VBA solo se ejecuta en la aplicación de escritorio de Word; Office Scripts se ejecuta en Word para la web y se puede activar mediante Power Automate.
  • Automate > Script > New Script: El punto de partida para crear un nuevo Office Script en Word para la web.
  • Word.run(context => { … }): La función contenedora requerida para todos los Office Scripts que interactúan con el modelo de objetos del documento.
  • context.sync(): Se debe llamar después de cada lote de cambios para aplicarlos al documento.

ADVERTISEMENT

Por qué las macros VBA no funcionan en Word para la web

Las macros VBA se compilan en código binario que se ejecuta dentro del proceso de escritorio de Word. Word para la web se ejecuta en un entorno de navegador en espacio aislado que no puede ejecutar VBA. Office Scripts usa TypeScript, un superconjunto tipado de JavaScript, y se ejecuta en un tiempo de ejecución del lado del servidor llamado motor de Office Scripts. Este motor proporciona un subconjunto del modelo de objetos de Word que es seguro para la ejecución en la nube.

La API de Office Scripts es asíncrona por diseño. Cada operación que lee o escribe contenido del documento debe estar envuelta en una llamada a Word.run() y seguida de context.sync(). VBA, en cambio, es síncrono y modifica el documento de inmediato. Esta diferencia arquitectónica es la razón principal por la que no se puede simplemente copiar el código VBA en Office Scripts.

Requisitos previos para usar Office Scripts

Necesita una suscripción de Microsoft 365 que incluya Office Scripts, como Microsoft 365 Business Standard o Enterprise E3/E5. Office Scripts solo está disponible en Word para la web, no en la aplicación de escritorio. Para acceder al editor de scripts, abra un documento en Word para la web y vaya a Automate > Script > New Script.

Pasos para convertir una macro VBA en un Office Script

Los siguientes pasos suponen que tiene una macro VBA funcional en la aplicación de escritorio de Word y desea crear un Office Script equivalente en Word para la web. Use una macro VBA simple que cambie la fuente del primer párrafo a negrita como ejemplo.

  1. Abra Word para la web e inicie un nuevo script
    En su navegador, abra el documento en Word para la web. Haga clic en Automate en la cinta de opciones, luego en Script y después en New Script. El panel Editor de código se abre con una plantilla de script predeterminada.
  2. Elimine el código predeterminado y escriba el contenedor asíncrono
    Seleccione todo el código en el editor y reemplácelo con:
    function main(workbook: WordScript.Word) {
      // Your code will go here
    }

    La función main es el punto de entrada. Recibe el objeto WordScript.Word, que da acceso al documento.

  3. Agregue el contexto Word.run
    Dentro de main, agregue:
    Word.run(async (context) => {
      // Operations go here
      await context.sync();
    });

    El método Word.run crea un contexto de solicitud. Cada operación de lectura o escritura debe estar dentro de esta devolución de llamada. El await context.sync() envía todos los cambios en cola al documento.

  4. Traduzca la lógica de VBA a la API de Office Scripts
    Para una macro VBA que establece el primer párrafo en negrita:
    • VBA: ActiveDocument.Paragraphs(1).Range.Font.Bold = True
    • Office Scripts: context.document.body.paragraphs[0].font.bold = true;

    Coloque esta línea antes de la llamada a context.sync(). Tenga en cuenta que las matrices tienen índice cero en TypeScript, por lo que el primer párrafo es paragraphs[0].

  5. Ejecute el script para probar
    Haga clic en el botón Run en la barra de herramientas del Editor de código. El script se ejecuta y el primer párrafo se pone en negrita. Si aparecen errores, revise la salida de la consola debajo del editor.
  6. Guarde el script con un nombre significativo
    Haga clic en el nombre del script en la parte superior del Editor de código (el predeterminado es “Untitled Script”), escriba un nuevo nombre y presione Entrar. El script se guarda en su OneDrive y aparece en la lista Automate > Script de este documento.

ADVERTISEMENT

Problemas comunes al migrar VBA a Office Scripts

Error “Cannot find name ‘ActiveDocument'”

Office Scripts no usa el objeto ActiveDocument. Acceda siempre al documento a través de la propiedad context.document. El objeto context es la única forma de interactuar con el documento.

Error “Property ‘Select’ does not exist”

Office Scripts no tiene un método Select. No puede seleccionar texto o rangos mediante programación. En su lugar, manipule el contenido directamente. Por ejemplo, para reemplazar texto, use range.insertText() o range.insertHtml().

El script agota el tiempo de espera al procesar un documento grande

Office Scripts tiene un límite de ejecución de 30 segundos. Si su macro VBA recorre cientos de párrafos, el script puede agotar el tiempo de espera. Optimice agrupando los cambios en una sola llamada a context.sync() y eliminando las llamadas innecesarias a context.sync() dentro de los bucles.

Office Scripts vs VBA: diferencias clave para la automatización de Word

Elemento VBA en Word de escritorio Office Scripts en Word para la web
Entorno de ejecución Aplicación de escritorio de Windows/macOS Tiempo de ejecución en la nube basado en navegador
Lenguaje Visual Basic for Applications TypeScript (superconjunto de JavaScript)
Acceso al modelo de objetos Síncrono, directo Asíncrono mediante context.sync()
Activación Atajo de teclado, botón, evento Ejecución manual, Power Automate, programada
Selección de documento ActiveDocument o ThisDocument context.document
Manejo de errores On Error Resume Next / GoTo Bloques try/catch
Tiempo máximo de ejecución Sin límite estricto 30 segundos

Ahora puede identificar qué macros VBA son candidatas para la migración a la nube y reescribirlas como Office Scripts. Comience con una macro simple que modifique el formato o inserte texto. Después de que el script funcione en Word para la web, conéctelo a un flujo de Power Automate para que se ejecute automáticamente cuando se agregue un archivo a una biblioteca de SharePoint. Para escenarios avanzados, explore la referencia de la API de Office Scripts para Word y descubra métodos adicionales como insertTable() y insertParagraph().

ADVERTISEMENT