Tienes una macro de VBA que funciona perfectamente en la versión de escritorio de Excel, pero falla o no hace nada cuando abres el mismo libro en Excel Online. Esto ocurre porque Excel Online se ejecuta en un navegador y no admite el motor completo de VBA que proporciona Excel de escritorio. Este artículo explica por qué las macros de VBA están bloqueadas en Excel Online y te ofrece la única solución fiable: convertir tu macro a Office Scripts o eliminar la macro por completo.
Conclusiones clave: Por qué fallan las macros de VBA en Excel Online y cómo solucionarlo
- El motor de VBA no está presente en Excel Online: Excel Online utiliza un motor de JavaScript basado en navegador que no puede ejecutar código VBA
- Convierte VBA a Office Scripts: La única forma de automatizar tareas en Excel Online es reescribir tu macro usando Office Scripts (TypeScript)
- Usa Power Automate como alternativa: Activa Office Scripts o macros de Excel de escritorio desde flujos en la nube cuando se requiera acceso en línea
Por qué Excel Online no puede ejecutar macros de VBA
Excel Online es una aplicación web construida con JavaScript y HTML5. No incluye el runtime de Visual Basic para Aplicaciones que instala Excel de escritorio. Cuando abres un libro que contiene código VBA en Excel Online, el navegador muestra un banner de advertencia: “Este libro contiene macros. Las macros no son compatibles con Excel para la web”. El proyecto VBA se conserva en el archivo, pero no puede ejecutarse.
Microsoft diseñó Excel Online para colaboración, coautoría en tiempo real y edición ligera. Las macros de VBA requieren acceso completo al sistema operativo Windows, al sistema de archivos y a bibliotecas externas. Un navegador no puede proporcionar ese nivel de acceso por razones de seguridad. Incluso si guardas el libro en OneDrive o SharePoint, Excel Online no ejecutará el código VBA.
Qué sucede cuando intentas ejecutar una macro en Excel Online
No aparece ningún mensaje de error porque los botones de macro y los atajos de teclado asignados simplemente no hacen nada. La pestaña Programador no está disponible en Excel Online. No puedes abrir el Editor de Visual Basic, ver el proyecto VBA ni depurar el código. El código de la macro permanece en el archivo, pero es invisible e inactivo.
Pasos para solucionar el problema de que la macro de VBA no funcione en Excel Online
Tienes tres opciones. La mejor solución a largo plazo es convertir tu macro de VBA a un Office Script. Los Office Scripts se ejecutan en Excel Online y son el reemplazo oficial de VBA en el navegador.
- Abre el libro en Excel Online y verifica el banner de advertencia
Ve al sitio de OneDrive o SharePoint donde está almacenado el archivo. Haz clic en el archivo para abrirlo en Excel Online. Observa la parte superior de la hoja de cálculo. Si ves un banner amarillo o gris que dice “Las macros no son compatibles con Excel para la web”, la macro está presente pero no puede ejecutarse. Haz clic en “Editar en la aplicación de escritorio” si necesitas ejecutar la macro de inmediato. - Graba un nuevo Office Script en Excel Online
Abre el libro en Excel Online. Ve a la pestaña Automatizar. Haz clic en “Nuevo script”. El Editor de código se abre en el lado derecho de la pantalla. Haz clic en “Grabar” para comenzar a capturar tus acciones. Realiza los pasos que haría tu macro de VBA. Haz clic en “Detener grabación”. El script se guarda como un archivo TypeScript dentro del libro. Nombra el script y pruébalo haciendo clic en “Ejecutar”. - Traduce manualmente el código VBA a Office Scripts
Si tu macro de VBA es compleja, debes reescribirla manualmente. Abre el código VBA en Excel de escritorio. Identifica cada operación: seleccionar rangos, copiar datos, aplicar fórmulas, ordenar tablas o crear gráficos. Escribe el código TypeScript equivalente en el Editor de código de Office Scripts. Por ejemplo, elRange("A1").Value = 5de VBA se convierte enworkbook.getWorksheet("Sheet1").getRange("A1").setValue(5). Usa la documentación de referencia de la API de Office Scripts de Microsoft para hacer coincidir cada método. - Asigna el script a un botón en Excel Online
Después de crear y probar el script, puedes agregar un botón a la hoja de cálculo. Haz clic en la pestaña Automatizar. Haz clic en “Todos los scripts”. Encuentra tu script. Haz clic en el menú de tres puntos junto al nombre del script y selecciona “Agregar a la hoja de cálculo”. Aparece un botón en la hoja. Cualquier usuario con permisos de edición puede hacer clic en el botón para ejecutar el script en Excel Online. - Usa Power Automate para activar el script desde un flujo en la nube
Si necesitas ejecutar el script automáticamente, crea un flujo en Power Automate. Ve a make.powerautomate.com. Crea un nuevo flujo programado o un flujo instantáneo. Agrega la acción “Ejecutar script” del conector de Excel Online (Business). Selecciona el libro y el script. El flujo puede ejecutarse en un temporizador, cuando se modifica un archivo o cuando se envía un formulario. Esto reemplaza losApplication.OnTimeo los desencadenadores de eventos de hoja de cálculo de VBA.
Si debes mantener la macro de VBA para usuarios de escritorio
Puedes mantener la macro de VBA en el archivo para usuarios de escritorio mientras proporcionas un Office Script para usuarios en línea. El libro almacenará tanto el proyecto VBA como el archivo de script por separado. Los usuarios de escritorio ven la pestaña Programador y pueden ejecutar la macro. Los usuarios en línea ven la pestaña Automatizar y pueden ejecutar el script. No se produce ningún conflicto porque Excel Online ignora por completo el proyecto VBA.
Problemas comunes después de convertir a Office Scripts
Office Scripts no están disponibles en mi inquilino
Office Scripts requieren una suscripción a Microsoft 365 que incluya la versión de escritorio de Excel. Business Standard, Business Premium, Enterprise E3 y Enterprise E5 incluyen Office Scripts. Si tienes un plan Microsoft 365 Basic o Family, Office Scripts no están disponibles. En ese caso, no puedes automatizar tareas en Excel Online. Debes editar el libro en la aplicación de escritorio.
Mi macro de VBA usa llamadas a la API de Windows o bibliotecas externas
Office Scripts no pueden llamar a funciones de la API de Windows, controles ActiveX ni objetos COM. Si tu macro interactúa con el sistema de archivos, envía correos electrónicos a través de Outlook o controla otras aplicaciones, esa funcionalidad se pierde en Excel Online. Debes reemplazar ese comportamiento con acciones de Power Automate o ejecutar la macro solo en Excel de escritorio.
El Office Script no funciona en todas las hojas de cálculo
Office Scripts deben hacer referencia a nombres de hoja específicos. Si tu libro tiene varias hojas y el usuario cambia el nombre de una hoja, el script falla. Usa el método getWorksheet() con el nombre de la hoja como cadena. Para acceso dinámico, recorre todas las hojas de cálculo usando workbook.getWorksheets() y verifica la propiedad getName().
Macro de VBA vs Office Script: diferencias clave
| Elemento | Macro de VBA (Escritorio) | Office Script (Excel Online) |
|---|---|---|
| Lenguaje | Visual Basic para Aplicaciones | TypeScript (superconjunto de JavaScript) |
| Ubicación del runtime | Aplicación de escritorio de Windows | Navegador (nube de Microsoft) |
| Acceso a archivos | Sistema de archivos completo, DLL externas, objetos COM | Solo el libro actual a través de la API |
| Interfaz de usuario | UserForms, controles ActiveX, cuadros de mensaje | Sin interfaz personalizada; usa botones o Power Automate |
| Métodos de activación | Eventos de hoja de cálculo, Application.OnTime, botones | Botones de script, flujos de Power Automate, ejecuciones programadas |
| Modelo de seguridad | Archivo habilitado para macros (.xlsm) con firmas digitales | Script almacenado dentro del archivo .xlsx; sin advertencia de macros |
Ahora puedes identificar por qué tu macro de VBA falla en Excel Online y aplicar la solución correcta. La solución principal es convertir tu macro a un Office Script usando la pestaña Automatizar. Si Office Scripts no están disponibles en tu suscripción, edita el libro en la aplicación de escritorio siempre que necesites ejecutar la macro. Para automatización avanzada, combina Office Scripts con Power Automate para activar acciones desde eventos en la nube. Usa el método workbook.getWorksheet() en tu script para evitar errores cuando cambien los nombres de las hojas de cálculo.