CSV

LibreOffice Calc con VBA: cómo abrir y ejecutar macros

octubre 30, 2026 Tuto Excel 12 min read
LibreOffice Calc con VBA: cómo abrir y ejecutar macros

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,00
  • Febrero: 145,50
  • Marzo: 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.

Nota: No confundas VBA con LibreOffice Basic. VBA procede de Office; LibreOffice Basic es el lenguaje propio de LibreOffice. Calc puede crear una capa de compatibilidad, pero no es idéntico a Excel.
Cuidado: Si la macro depende de una función exclusiva de Excel, puede funcionar en Office y detenerse en Calc.

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.

Load/SaveVBA Properties

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.

Cuidado: La configuración de seguridad puede bloquear una macro aunque Executable code esté marcado. Revisa Herramientas > Opciones > LibreOffice > Security > Macro Security.
Comprueba: El archivo se abre y el módulo VBA aparece disponible en el IDE, pero todavía no necesariamente se ejecuta.

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.

HerramientasMacrosEditar macros

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.

  1. Selecciona el módulo Module1.
  2. Borra el código anterior o colócalo debajo.
  3. Escribe la macro completa.
  4. Guarda el módulo.
  5. Pulsa F5 para ejecutar la macro.
Comprueba: La celda 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
  1. Selecciona la macro MensajeDePrueba.
  2. Pulsa F5.
  3. Lee el cuadro de diálogo.
  4. 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í:

D2fx
A B C D
1 Importe Detalle Estado Total copiado
2 120,00 Ventas Cerrado
D2 La macro copiará aquí el total de A2
Enero

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
  1. Guarda el libro.
  2. Abre Herramientas > Macros > Basic Macros.
  3. Selecciona CopiarA2AD2.
  4. Pulsa Run.
  5. Cambia a las hojas Enero, Febrero y Marzo.

Los resultados son:

D2fxresultado de CopiarA2AD2
A B C D
1 Importe Detalle Estado Total copiado
2 120,00 Ventas Cerrado 120,00
Enero
D2fx145,50
A B C D
1 Importe Detalle Estado Total copiado
2 145,50 Ventas Cerrado 145,50
Febrero
D2fx134,50
A B C D
1 Importe Detalle Estado Total copiado
2 134,50 Ventas Cerrado 134,50
Marzo
Comprueba: Cada hoja conserva el importe de 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.

  1. Ejecuta CopiarA2AD2.
  2. Pulsa Ctrl+S.
  3. Elige la ubicación.
  4. Mantén la extensión compatible con el documento.
  5. Cierra el libro.
  6. Vuelve a abrirlo y comprueba que las celdas D2 conservan sus valores.
Nota: Las funciones y objetos VBA se ejecutan en el documento, pero una macro también puede cambiar datos, formatos o archivos. Guarda una copia antes de probar una automatización nueva.

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:

  1. Selecciona la línea Option VBASupport 1.
  2. Colócala antes de Sub MensajeDePrueba.
  3. Guarda el módulo.
  4. Ejecuta de nuevo con F5.
Comprueba: La macro muestra 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:

  1. Que la macro está guardada en el módulo correcto.
  2. Que Option VBASupport 1 está al principio.
  3. Que la seguridad de macros no está bloqueando la ejecución.
  4. 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
Cuidado: La lista de objetos soportados no significa que todos sus miembros estén disponibles. La cobertura de propiedades y métodos es incompleta.

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 Properties y activar Executable code.
  • Colocar Option VBASupport 1 antes 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

  1. MicrosoftSIFECHA — documentación oficialconsultado el 23/10/2026
  2. MicrosoftPAGO — documentación oficialconsultado el 23/10/2026
  3. MicrosoftLAMBDA — documentación oficialconsultado el 23/10/2026
  4. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 23/10/2026
  5. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 23/10/2026