Asignar una fórmula a una celda de Calc con una macro

¿Podemos asignar una fórmula a una celda de una hoja de Calc desde una macro?


La respuesta es: ¿Cómo quieres hacerlo, escribiendo la función en inglés o en tu idioma?

 

 

El lenguaje de macros de OpenOffice y LibreOffice permite insertar una fórmula en una celda de Calc.

Para ello podemos utilizar SetFormula, como vemos en este ejemplo:

oCelda.SetFormula ("=SUM(A5:B5)")

SetFormula precisa que se pase la cadena que forma la fórmula como un argumento, por lo que se indica encerrado entre paréntesis.

El problema es que SetFormula obliga a introducir la fórmula con el nombre de las funciones en inglés, y no siempre lo conocemos.

El API de OpenOffice y LibreOffice nos ofrece una solución más adecuada: FormulaLocal

A diferencia de la anterior, FormulaLocal nos permite introducir la fórmula utilizando los nombres de las funciones en nuestro idioma. Así, el ejemplo anterior se convierte en:

oCelda.FormulaLocal = "=SUMA(A5:B5)"   

Como vemos FormulaLocal no precisa que le pasemos la cadena como argumento, sino asignándola con un igual.

Veamos un ejemplo completo:

Sub InsertaFormulaEnCelda()
   Dim oHoja As Object, oCelda As Object
   oHoja = ThisComponent.Sheets(0)
   oCelda = oHoja.getCellRangeByName("A3")
   oCelda.FormulaLocal = "=SUMA.PRODUCTO(A12:A1000<>0)"
End Sub

En este ejemplo se asigna la fórmula SUMA.PRODUCTO(A12:A1000<>0) a la celda A3 de la Hoja 1 de nuestra hoja de cálculo, utilizando el nombre de la función en español.

6 comentarios

Comentario De: jose [Visitante]

y si quiero asignar la formula en otra hoja,como sería?

12.01.15 @ 18:54 Reply to this comment
Comentario De: [Miembro]

Hola Jose

Claro que se puede.

En la línea

oHoja = ThisComponent.Sheets(0)

Utiliza el ordinal de la hoja a la que quieres asignar (la hoja 1ª es 0, la hoja 2ª es 1, la hoja tercera es 2...), o mejor, busca como puedes seleccionar la hoja por su nombre, cosa que en algún lugar hemos tratado, pero ahora no recuerdo.

Saludos

Comentario De: Fax [Visitante]

tengo que encontrar celdas repetidas en un rango de celdas. La macro la tengo lista, pero deseo excluir algunos resultados . por ejemplo "LAB1" (la cual se encuentra concatenada, pero la celda muestra solo esa información) cómo puedo hacer la programación si mi macro es ésta:

Sub CopiarCelda()

Dim Rango1 As Range
Dim celda1 As Range

Set Rango1 = Range("B4", "G58")
For Each celda1 In Rango1
If WorksheetFunction.CountIf(Rango1, celda1.Value) > 1 Then
celda1.Interior.ColorIndex = 38
End If
Next celda1
End Sub

24.10.16 @ 18:22 Reply to this comment
Comentario De: [Miembro]

Evalúa si el contenido de celda1 es uno de los textos a excluir
Saludos :)

27.05.17 @ 23:23 Reply to this comment
Comentario De: Senda [Visitante]  

Hola buenos días, quiero insertar fórmula igualar celda de una hoja a otra, en varias hojas. Me explico
Tengo una hoja resumen y tres hojas pues en esas tres hojas quiero ponerles la fórmula en unas columnas en concreto, F,H,J

Un saludo

30.08.20 @ 12:28 Reply to this comment
Comentario De: senda [Visitante]  

Hola buenas tardes, hay alguna manera de asignar una formula a un rago de celdas en distintas hojas??
Me explico.

Tengo una hoja SummarySheet y luego 5 hojas a parte. las cuales quiero igualar esas 5 a la hoja summarySheet.
POr ejemplo las columnas F,H,J,L.....

He probado la macro de arriba con setformula y formulalocal y me sale este error
Error de ejecución de BASIC.
No se encontró la propiedad o el método: SetFOrmula.
Error de ejecución de BASIC.
No se encontró la propiedad o el método: FOrmulaLocal.

Un saludo y Gracias

30.08.20 @ 17:33 Reply to this comment

Esta publicación tiene 1 reacción esperando moderación...


Form is loading...