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.

4 comentarios

Comentario De: jose [Visitante]

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

12.01.15 @ 17: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

13.01.15 @ 12:18 Reply to this comment
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

Comentario De: [Miembro]

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

27.05.17 @ 21:23 Reply to this comment


Form is loading...

Otros usuarios vieron...

  • Macro presentación aleatoria para OpenOffice Impress

    ¿Necesitas que tu presentación Impress se muestre cada vez que la ejecutas con un orden de diapositivas distinto?

    ¿Y que ese orden sea aleatorio?

    Esta macro te da una sen…

  • Este procedimiento para ordenar matrices es, en la gran mayoría de casos, más rápido que el método de la burbuja.

    Para conocer más sobre estos métodos puedes consultar las sigui…

  • Insertar la hora actual en una celda es sencillo.

    Pero no deberemos utilizar la función AHORA(), pues cada vez que se recalcule la hoja se actualizará.

    Hacer que un b…

Patrocinado por SBS  Contacto • ©2019 by SalvaDCH