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

13.01.15 @ 13: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

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 :)

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...

Otros usuarios vieron...

  • Proteger macros en OpenOffice

     

    OpenOffice es una aplicación de software libre.

    Pero las macros que tú mismo programas no tienen por qué serlo.

    Quizás quieras proteger tus macros de miradas indiscretas, o senc…

  • Seleccionar un rango de celdas e imprimirlas no es sencillo con Calc; necesitamos definir previamente un rango de impresión.

    Esta sencilla macro que describimos en este post realizará todo ese t…

  •  

    En el foro se ha preguntado la posibilidad de realizar una búsqueda de palabras que contengan o no vocales acentuadas, con el fin de facilitar el aprendizaje del e…

Patrocinado por SBS  Contacto • ©2024 by SalvaDCH