La macro de Excel no siempre se ejecuta igual en LibreOffice Calc: Calc ofrece soporte parcial de VBA y puede necesitar una adaptación al modelo de objetos de LibreOffice. En este tutorial usarás un libro de ventas con tres hojas: cada hoja tendrá importes en A2 y una macro summingrá esos valores. Al terminar sabrás cargar el archivo, activar Option VBASupport 1, editar el código, ejecutarlo y comprobar qué parte necesita traducción.
La guía utiliza la documentación oficial de LibreOffice, basada en LibreOffice 26.2. Los nombres de las opciones se muestran en inglés porque son los que aparecen en la interfaz y en la documentación del material. Los datos están comprobados en octubre de 2026.
Qué es VBA en LibreOffice Calc y cuándo resulta útil
VBA es Visual Basic for Applications, el lenguaje que permite automatizar tareas dentro de aplicaciones de Microsoft Office. En LibreOffice Calc, el soporte es parcial: LibreOffice reconoce muchos patrones habituales, pero no implementa necesariamente todos los objetos, propiedades y métodos de Excel.
Piensa en un libro de ventas con las hojas Enero, Febrero y Marzo. Cada hoja tiene un total en A2:
Enero: 120,00Febrero: 145,50Marzo: 134,50
Una macro puede sumar esos tres importes y dejar el resultado en D2, sin copiar y pegar cifras manualmente. VBA es útil para procesos repetitivos, como generar informes, copiar columnas o aplicar una misma operación en varias hojas.
Cargar un archivo de Excel con macros VBA
Para cargar el código VBA de un libro de Excel, abre el menú Load/Save y entra en VBA Properties. En el cuadro de diálogo, activa Executable code y acepta.
Después vuelve a cargar el archivo. Si la casilla está activa, LibreOffice carga el código preparado para ejecutarse. Si no la marcas, el código se muestra comentado para poder inspeccionarlo, pero no se ejecuta.
El archivo de ejemplo debe contener una macro en un módulo. Si el libro fue creado en Excel y tiene extensión .xlsm, LibreOffice puede reconocer el contenido VBA según la forma en que se haya guardado y las opciones de compatibilidad.
Executable code esté marcado. Revisa Herramientas > Opciones > LibreOffice > Security > Macro Security.Habilitar Option VBASupport 1 en el módulo
Cuando se carga un archivo con código VBA, LibreOffice inserta Option VBASupport 1 en los módulos Basic. Esta instrucción activa un conjunto limitado de funciones y objetos VBA.
Abre el módulo y colócala antes de la primera macro:
Option VBASupport 1
El módulo completo puede empezar así:
Option VBASupport 1
Sub SumarA2()
Dim total As Double
total = 0
MsgBox "La suma empieza con: " & total
End Sub
La instrucción debe estar al principio del módulo, antes de Sub. No la escribas dentro de una macro ni después de otra instrucción.
Option VBASupport 1 no convierte Calc en Excel ni garantiza compatibilidad completa. Solo habilita la capa disponible en LibreOffice.
Editar una macro en el IDE de LibreOffice Basic
Para revisar el código, abre Herramientas > Macros > Editar macros. En el cuadro de diálogo, selecciona el documento, la biblioteca y el módulo que contiene la macro.
El IDE de LibreOffice Basic se abre como una ventana de edición. En el árbol lateral aparecen los documentos, bibliotecas y módulos. Selecciona Module1 para ver sus procedimientos.
Ahora añade una macro que escriba un texto en la celda D2:
Option VBASupport 1
Sub PrepararInforme()
ThisComponent.Sheets.getByIndex(0).getCellByPosition(3, 1).setString("Informe preparado")
End Sub
Aquí getByIndex(0, 1) usa base cero: 0 identifica la primera hoja y 1 identifica la segunda fila. Por eso la celda es D2. Esta llamada utiliza objetos UNO de LibreOffice y no depende de Worksheets de Excel.
- Selecciona el módulo
Module1. - Borra el código anterior o colócalo debajo.
- Escribe la macro completa.
- Guarda el módulo.
- Pulsa F5 para ejecutar la macro.
D2 de la primera hoja muestra Informe preparado.Adaptar una macro de Excel a LibreOffice Calc
Una macro de Excel puede empezar así:
Sub SumarHojas()
Dim total As Double
total = WorksheetFunction.Sum(Sheets("Enero").Range("A2"), Sheets("Febrero").Range("A2"), Sheets("Marzo").Range("A2"))
Range("D2").Value = total
End Sub
En Excel, WorksheetFunction, Sheets y Range forman parte del modelo habitual. En Calc, la misma macro no debe asumir que todos esos objetos tienen el mismo comportamiento. Es más seguro obtener las hojas mediante ThisComponent.Sheets, localizar cada celda con getCellByPosition y leer su contenido.
La versión adaptada suma A2 en las tres hojas:
Option VBASupport 1
Sub SumarA2DeTodasLasHojas()
Dim documento As Object
Dim hoja As Object
Dim total As Double
Dim indice As Integer
documento = ThisComponent
total = 0
For indice = 0 To documento.Sheets.Count - 1
hoja = documento.Sheets.getByIndex(indice)
total = total + hoja.getCellByPosition(0, 1).getValue()
Next indice
documento.Sheets.getByIndex(0).getCellByPosition(3, 1).setValue(total)
End Sub
La suma correcta es 120,00 + 145,50 + 134,50 = 400,00.
Reconocer los objetos VBA que tienen soporte parcial
| Objeto | Qué suele funcionar | Qué conviene revisar |
|---|---|---|
Application |
Algunas propiedades generales | Métodos no Covered o propiedades específicas |
Workbook |
Referencias al libro abierto | activez de varios libros y rutas |
Worksheet |
Referencias básicas a hojas | Índices,activación ación y métodos |
Range |
Selección de rangos frecuentes | Direcciones, copying y propiedades no implementadas |
Rows |
Acceso a filas | Miembros concretos usados por la macro |
Columns |
Acceso a columnas | Miembros concretos y conversiones |
La compatibilidad es parcial incluso dentro de un objeto. Que Range exista no significa que todos sus métodos estén disponibles. Antes de traducir una macro, busca las llamadas que dependan de Excel y conviértelas poco a poco.
Comprobar una macro antes de ejecutarla
La primera comprobación debe ser pequeña y visible. Usa esta macro:
Sub MensajeDePrueba()
MsgBox "Macro ejecutada"
End Sub
- Selecciona la macro
MensajeDePrueba. - Pulsa F5.
- Lee el cuadro de diálogo.
- Ciérralo con
Aceptar.
Macro ejecutada
Si no aparece, revisa que el módulo tenga Option VBASupport 1 antes de la macro, que Ejecutable code esté activo y que el procedimiento esté guardado en el documento correcto. También comprueba que no exista unaJxerror de sintaxis en la ventana del IDE.
Ejecutar una macro y guardar sus resultados
Ahora vamos a copiar los importes de A2 de cada hoja a D2. La hoja inicial queda así:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Importe | Detalle | Estado | Total copiado |
| 2 | 120,00 | Ventas | Cerrado |
La macro recorre las hojas y copia el valor numérico:
Sub CopiarA2AD2()
Dim hoja As Object
Dim indice As Integer
For indice = 0 To ThisComponent.Sheets.Count - 1
hoja = ThisComponent.Sheets.getByIndex(indice)
hoja.getCellByPosition(3, 1).setValue(hoja.getCellByPosition(0, 1).getValue())
Next indice
End Sub
- Guarda el libro.
- Abre
Herramientas > Macros > Basic Macros. - Selecciona
CopiarA2AD2. - Pulsa
Run. - Cambia a las hojas
Enero,FebreroyMarzo.
Los resultados son:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Importe | Detalle | Estado | Total copiado |
| 2 | 120,00 | Ventas | Cerrado | 120,00 |
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Importe | Detalle | Estado | Total copiado |
| 2 | 145,50 | Ventas | Cerrado | 145,50 |
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Importe | Detalle | Estado | Total copiado |
| 2 | 134,50 | Ventas | Cerrado | 134,50 |
A2 en D2, sin cambiar las demás celdas.Guardar el libro después de ejecutar VBA
Para conservar la macro y sus resultados, guarda el documento en un formato que LibreOffice reconozca como libro con Basic. Si editaste un .xlsm, conserva esa extensión cuando el diálogo de guardado permita hacerlo. Si creaste una copia de trabajo, usa el formato que muestre el diálogo de LibreOffice para archivos de Calc con macros.
- Ejecuta
CopiarA2AD2. - Pulsa Ctrl+S.
- Elige la ubicación.
- Mantén la extensión compatible con el documento.
- Cierra el libro.
- Vuelve a abrirlo y comprueba que las celdas
D2conservan sus valores.
Corregir macros que funcionan en Excel pero fallan en Calc
El fallo más frecuente es tratar Calc como si tuviera exactamente la API de Excel. Por ejemplo, esta llamada puede detenerse porque WorksheetFunction o un método concreto no está implementado en el entorno activo:
Sub TotalDeExcel()
Range("D2").Value = WorksheetFunction.Sum(Range("A2"))
End Sub
La alternativa escrita con objetos UNO usa ThisComponent, una hoja concreta y una celda concreta:
Sub TotalParaCalc()
Dim hoja As Object
hoja = ThisComponent.Sheets.getByName("Enero")
hoja.getCellByPosition(3, 1).setValue(hoja.getCellByPosition(0, 1).getValue())
End Sub
Si la macro falla, identifica primero la línea marcada. Después comprueba qué objeto usa: Range, WorksheetFunction, Workbook u otro miembro de Excel. Sustitúyelo por una operación equivalente en Calc y vuelve a ejecutar.
La instrucción Option VBASupport 1 no está al principio
Si la instrucción aparece después de una macro, puede no activar correctamente la compatibilidad. Colócala en la primera línea del módulo:
Option VBASupport 1
Sub MensajeDePrueba()
MsgBox "Macro ejecutada"
End Sub
- Selecciona la línea
Option VBASupport 1. - Colócala antes de
Sub MensajeDePrueba. - Guarda el módulo.
- Ejecuta de nuevo con F5.
Macro ejecutada y no se detiene por una instrucción mal situada.El código aparece comentado o no se ejecuta
Si Executable code no está marcado, LibreOffice conserva el código para inspección, pero no lo ejecuta. Abre Load/Save > VBA Properties, activa Executable code y vuelve a cargar el documento.
Después comprueba:
- Que la macro está guardada en el módulo correcto.
- Que
Option VBASupport 1está al principio. - Que la seguridad de macros no está bloqueando la ejecución.
- Que el procedimiento se ejecuta desde el documento que contiene los datos.
Un objeto de Excel no responde en LibreOffice
Una macro puede usar Range para leer una celda y fallar al aplicar una propiedad que Calc no cubre. En lugar de cambiar solo el nombre del objeto, cambia también la forma de obtenerlo.
Código dependiente de Excel:
Sub CopiarValor()
Sheets("Enero").Range("D2").Value = Sheets("Enero").Range("A2").Value
End Sub
Código para LibreOffice Basic:
Sub CopiarValorEnCalc()
Dim hoja As Object
hoja = ThisComponent.Sheets.getByName("Enero")
hoja.getCellByPosition(3, 1).setValue(hoja.getCellByPosition(0, 1).getValue())
End Sub
La línea que necesita adaptación es la que contiene Sheets, Range y Value. Si aparece un aviso de propiedad o método no implementado, sustituye esa línea por el acceso UNO equivalente.
Saber qué límites tiene VBA en LibreOffice Calc
| Área | Qué debes esperar |
|---|---|
| Objetos | Application, Workbook, Worksheet, Range, Rows y Columns tienen soporte parcial |
| Propiedades | Las propiedades admitidas dependen del objeto y de la versión de LibreOffice |
| Métodos | Pueden faltar métodos usados por una macro de Excel |
| Referencias | Option VBASupport 1 habilita compatibilidad, no equivalencia total |
| Seguridad | Las macros pueden bloquearse según Macro Security |
| Archivo | El formato y la extensión influence en la conservación del código |
Para una macro sencilla, como leer A2 y escribir D2, la adaptación suele ser pequeña. Para una macro que controla eventos, gráficos, filtros o comportamientos muy específicos de Excel, puede ser más rápido conservar el libro en Excel o escribir la automatización directamente con objetos UNO.
La documentación oficial recomienda revisar cada miembro usado por la macro. La página VBA Supported Objects enumera los objetos contemplados; la ayuda de Option VBASupport explica la instrucción de compatibilidad.
Lo que ya sabes hacer con VBA en LibreOffice Calc
- Abrir un archivo de Excel que contiene VBA.
- Revisar
Load/Save > VBA Propertiesy activarExecutable code. - Colocar
Option VBASupport 1antes de la primera macro. - Abrir el IDE desde
Herramientas > Macros > Editar macros. - Localizar la biblioteca y el módulo que contienen el código.
- Distinguir una llamada de Excel de una alternativa con objetos UNO.
- Ejecutar una prueba pequeña y comprobar su mensaje o resultado visible.
- Copiar datos de una hoja con una macro adaptada a Calc.
- Guardar el libro y verificar que conserva su contenido y sus macros.
Ahora toma una macro propia, Sustituye cada acceso directo a Excel por una operación equivalente con ThisComponent y prueba el resultado en una copia de un libro de ventas.
Dudas al usar VBA en LibreOffice Calc
1. ¿Cómo convierto una macro de Excel en LibreOffice Basic?
Abre el archivo y activa Executable code en Load/Save > VBA Properties. Después revisa la macro en el IDE de LibreOffice Basic y sustituye objetos o métodos no implementados por alternativas UNO. Option VBASupport 1 habilita compatibilidad, pero no garantiza que toda la macro funcione sin cambios.
2. ¿Tiene VBA LibreOffice Calc?
LibreOffice Calc incluye un soporte parcial de VBA. Al cargar un documento, puede activar una capa de compatibilidad mediante Option VBASupport 1, disponible en los módulos Basic. Algunas propiedades y métodos de Excel están cubiertos, mientras que otros deben reescribirse con el modelo de objetos de LibreOffice.
3. ¿Puede ejecutar LibreOffice las macros de Excel?
Sí, si el archivo se abre con Executable code activado y la seguridad de macros permite ejecutarlas. No todas las macros son compatibles: LibreOffice implementa solamente una parte de los objetos y métodos de Excel. Antes de confiar en una automatización, prueba la macro con una copia del libro.
4. ¿Dónde está el tutorial de VBA para LibreOffice Calc?
En LibreOffice, las macros se editan mediante Herramientas > Macros > Editar macros, que abre el IDE de LibreOffice Basic. Allí puedes revisar módulos, modificar el código y ejecutarlo con F5. La guía oficial de LibreOffice explica el uso de VBA, el soporte parcial y el modelo de objetos UNO.
5. ¿Cuál es la diferencia entre LibreOffice Basic y VBA?
VBA es el lenguaje de macros de Microsoft Office; LibreOffice Basic pertenece a LibreOffice y usa principalmente objetos UNO. Calc puede interpretar una parte de VBA mediante Option VBASupport 1, pero las referencias, propiedades y métodos que no están implementados deben adaptarse al entorno de LibreOffice.
6. ¿LibreOffice tiene macros?
Sí. LibreOffice Basic permite grabar y programar tareas repetitivas en Calc,Writer, Impress y otras aplicaciones. Puedes abrir una macro desde Herramientas > Macros > Editar macros, guardarla en una biblioteca Standard o en un módulo del documento y ejecutarla desde el mismo editor.
7. ¿Dónde puedo descargar una biblioteca de código VBA?
La forma segura de obtener código para LibreOffice es copiar un módulo de una biblioteca Standard propia o consultar la documentación oficial. Antes de instalar bibliotecas de terceros, revisa su origen y el código: una macro puede modificar o eliminar datos del documento abierto.
8. ¿Existe una guía en PDF sobre programación con LibreOffice Basic?
La documentación oficial de LibreOffice incluye guías de Calc y de LibreOffice Basic disponibles en su sitio de documentación. Para empezar, consulta la guía de macros de Calc y la página del IDE de LibreOffice Basic; conviene practiced con un libro de copia antes de automatizar datos importantes.
Fuentes
- MicrosoftSIFECHA — documentación oficialconsultado el 23/10/2026
- MicrosoftPAGO — documentación oficialconsultado el 23/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 23/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 23/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 23/10/2026