Cómo convertir una macro VBA de Word en un complemento de office
🔍 WiseChecker

Cómo convertir una macro VBA de Word en un complemento de office

Tiene una macro VBA de Word que automatiza una tarea repetitiva, como dar formato a documentos o insertar texto predefinido. Distribuir esta macro a otros usuarios es difícil porque cada persona debe importarla manualmente en su plantilla Normal.dotm o en un documento. Los complementos de Office ofrecen una forma moderna y segura de compartir funcionalidad en Word, Excel y PowerPoint sin que los usuarios tengan que confiar en macros VBA. Este artículo explica cómo convertir su macro VBA existente en un complemento de Office mediante un panel de tareas y un archivo de script.

Puntos clave: Convertir una macro VBA en un complemento de panel de tareas

  • Los complementos de Office usan tecnologías web (HTML, JavaScript, CSS): Reemplace el código VBA por JavaScript y aloje los archivos en un servidor web o en una carpeta local.
  • El XML del manifiesto define la identidad y las capacidades del complemento: El manifiesto indica a Word dónde encontrar sus archivos y cómo mostrar el panel de tareas.
  • La carga local (sideloading) es el método de prueba más sencillo: Use el menú Insertar > Complementos > Mis complementos de Word para cargar un complemento sin firmar durante el desarrollo.

ADVERTISEMENT

Qué es un complemento de Office y en qué se diferencia de VBA

Un complemento de Office es una aplicación web que se ejecuta dentro de Word, Excel o PowerPoint. Usa HTML, JavaScript y CSS en lugar de VBA. El complemento se comunica con la aplicación de Office a través de la API de JavaScript de Office, que proporciona acceso al documento, la selección y la configuración.

Las macros VBA se ejecutan directamente en el proceso de Word y tienen acceso completo al modelo de objetos y a los recursos del sistema. Los complementos de Office se ejecutan en un control de navegador en espacio aislado. Este espacio aislado impide que el complemento acceda al sistema de archivos local o ejecute archivos ejecutables externos. La ventaja es que los usuarios no necesitan reducir su configuración de seguridad para habilitar macros. El complemento se puede distribuir a través de AppSource, un recurso compartido de red o una URL.

Antes de comenzar, necesita lo siguiente:

  • Word 2019, Word 2021, Word para Microsoft 365 o Word en la web
  • Un editor de texto como Notepad o Visual Studio Code
  • Conocimientos básicos de JavaScript y HTML
  • El código de su macro VBA como referencia para la lógica que desea replicar

Pasos para convertir una macro VBA en un complemento de Office

La conversión implica tres tareas principales: crear el archivo XML del manifiesto, escribir los archivos HTML y JavaScript, y cargar localmente el complemento para probarlo. El ejemplo siguiente convierte una macro VBA sencilla que inserta la fecha actual en el documento.

Paso 1: Crear el archivo XML del manifiesto

  1. Cree una nueva carpeta
    Nómbrela DateAddin. Esta carpeta contendrá todos los archivos del complemento.
  2. Cree un archivo llamado manifest.xml
    Abra un editor de texto y pegue el siguiente XML. Reemplace https://localhost:3000 con la URL donde aloja los archivos o use la ruta local durante las pruebas.
    <?xml version="1.0" encoding="UTF-8"?>
    <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
      <Id>c7a8b9d0-1234-5678-9abc-def012345678</Id>
      <Version>1.0.0.0</Version>
      <ProviderName>Your Name</ProviderName>
      <DefaultLocale>en-US</DefaultLocale>
      <DisplayName DefaultValue="Insert Date Add-in"/>
      <Description DefaultValue="Inserts the current date at the cursor position."/>
      <Hosts>
        <Host Name="Document"/>
      </Hosts>
      <DefaultSettings>
        <SourceLocation DefaultValue="https://localhost:3000/index.html"/>
      </DefaultSettings>
      <Permissions>ReadWriteDocument</Permissions>
    </OfficeApp>
  3. Genere un GUID único para el elemento Id
    Use un generador de GUID en línea o ejecute [guid]::NewGuid() en PowerShell. Cada complemento debe tener un ID único.

Paso 2: Crear los archivos HTML y JavaScript

  1. Cree index.html
    En la misma carpeta, cree un archivo llamado index.html. Agregue la siguiente estructura HTML:
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>Insert Date Add-in</title>
      <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
      <script src="app.js"></script>
    </head>
    <body>
      <h1>Insert Date</h1>
      <button id="insertDate">Insert Current Date</button>
    </body>
    </html>
  2. Cree app.js
    Cree un archivo llamado app.js en la misma carpeta. Agregue el siguiente JavaScript. Este código replica una macro VBA que escribe la fecha actual en el documento.
    Office.onReady(function(info) {
      if (info.host === Office.HostType.Word) {
        document.getElementById("insertDate").onclick = function() {
          Word.run(function(context) {
            var today = new Date();
            var dateString = today.toLocaleDateString();
            var selection = context.document.getSelection();
            selection.insertText(dateString, Word.InsertLocation.replace);
            return context.sync();
          }).catch(function(error) {
            console.log(error);
          });
        };
      }
    });
  3. Consulte la referencia de la API de JavaScript de Office para las acciones de su macro
    Si su macro VBA usa métodos como Selection.TypeText o Selection.InsertAfter, busque el método equivalente en la documentación de la API de JavaScript de Office. El método insertText del ejemplo anterior reemplaza el texto seleccionado.

Paso 3: Alojar los archivos y cargar localmente el complemento

  1. Aloje los archivos en un servidor web local o en un recurso compartido de red
    Para las pruebas, use un servidor HTTP sencillo. Con Node.js instalado, ejecute npx http-server -p 3000 en la carpeta DateAddin. El servidor debe usar HTTPS para los complementos de Office. Use un certificado autofirmado o ejecute el comando con la marca -S y un archivo de certificado.
  2. Abra Word y vaya a Insertar > Complementos > Mis complementos
    Haga clic en Cargar mi complemento en la parte inferior del cuadro de diálogo.
  3. Vaya a su archivo manifest.xml
    Seleccione el archivo y haga clic en Cargar. El complemento aparece en el panel de tareas.
  4. Pruebe el complemento
    Coloque el cursor en un documento y haga clic en el botón Insertar fecha actual. Debería aparecer la fecha actual.

ADVERTISEMENT

Problemas comunes de conversión y cómo solucionarlos

El panel de tareas muestra un error o una página en blanco

Esto suele significar que la URL SourceLocation del manifiesto es incorrecta o que el servidor web no está en ejecución. Verifique que la URL coincida exactamente con la dirección del servidor, incluido el número de puerto. Si usa localhost, asegúrese de que el servidor esté activo y de que el certificado sea de confianza. Abra las herramientas de desarrollo del navegador en el panel de tareas haciendo clic con el botón derecho y seleccionando Inspeccionar para ver los errores de la consola.

El método de la API de JavaScript no funciona como se espera

La API de JavaScript de Office no cubre todos los métodos de VBA. Por ejemplo, no hay un equivalente directo para Dialogs o FileDialog. Debe usar controles de formulario HTML para la entrada del usuario. Consulte la referencia de la API de JavaScript de Microsoft Office para conocer los métodos disponibles. Si falta un método, puede combinar varias llamadas a la API o usar propiedades Office.context.document.

El complemento funciona solo en Word en la web pero no en Word de escritorio

Word de escritorio requiere que el complemento se sirva a través de HTTPS con un certificado válido. Los certificados autofirmados funcionan para las pruebas, pero es posible que deba agregar el certificado al almacén de Entidades de certificación raíz de confianza de la máquina local. Para producción, use un certificado de una entidad de certificación de confianza.

Macro VBA vs. complemento de Office: diferencias clave para desarrolladores

Elemento Macro VBA Complemento de Office
Lenguaje de programación VBA (Visual Basic for Applications) JavaScript con HTML y CSS
Método de distribución Integrado en el documento o la plantilla Manifiesto XML que apunta a archivos alojados
Modelo de seguridad Depende de la configuración de seguridad de macros En espacio aislado, sin acceso al sistema de archivos
Compatibilidad multiplataforma Windows y Mac (limitada) Windows, Mac, web, iOS, Android
Instalación por el usuario Importación manual o ubicación de confianza Un clic desde Insertar > Complementos
Mecanismo de actualización Reemplazar la macro manualmente Actualizar los archivos en el servidor; los usuarios obtienen la última versión en la siguiente carga

Convertir una macro VBA en un complemento de Office le ofrece un método de distribución moderno que funciona en todas las plataformas sin advertencias de seguridad. Comience replicando la lógica principal en JavaScript con la API de JavaScript de Office. Después de probarlo mediante la carga local, puede publicar el complemento en el catálogo de su organización o en AppSource. Para macros complejas, considere dividir la funcionalidad en varias funciones y usar un panel de tareas con botones o listas desplegables para la interacción del usuario.

ADVERTISEMENT