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.
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
- Cree una nueva carpeta
NómbrelaDateAddin. Esta carpeta contendrá todos los archivos del complemento. - Cree un archivo llamado
manifest.xml
Abra un editor de texto y pegue el siguiente XML. Reemplacehttps://localhost:3000con 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> - 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
- Cree
index.html
En la misma carpeta, cree un archivo llamadoindex.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>
- Cree
app.js
Cree un archivo llamadoapp.jsen 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); }); }; } }); - Consulte la referencia de la API de JavaScript de Office para las acciones de su macro
Si su macro VBA usa métodos comoSelection.TypeTextoSelection.InsertAfter, busque el método equivalente en la documentación de la API de JavaScript de Office. El métodoinsertTextdel ejemplo anterior reemplaza el texto seleccionado.
Paso 3: Alojar los archivos y cargar localmente el complemento
- 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, ejecutenpx http-server -p 3000en la carpetaDateAddin. El servidor debe usar HTTPS para los complementos de Office. Use un certificado autofirmado o ejecute el comando con la marca-Sy un archivo de certificado. - Abra Word y vaya a Insertar > Complementos > Mis complementos
Haga clic en Cargar mi complemento en la parte inferior del cuadro de diálogo. - Vaya a su archivo
manifest.xml
Seleccione el archivo y haga clic en Cargar. El complemento aparece en el panel de tareas. - 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.
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.