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
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
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 @ 16:22
Comentario De: [Miembro]

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

27.05.17 @ 21:23


Form is loading...

Otros usuarios vieron...

  • Podemos utilizar la función InStr para encontrar la última posición que ocupa una letra o texto en una cadena.

    El código se muestra a continuación:

  • 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

  • Esta función devuelve la letra del NIF asociada a un número de DNI

    Function LetraNif(dni As Long) As String
    LetraNif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1)
    End Function

Patrocinado por SBS  Contacto • ©2018 by SalvaDCH