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

Icono de macros de OpenOffice.org

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

7 comentarios sobre “Asignar una fórmula a una celda de Calc con una macro”

  1. SalvaDCH Autor del artículoContestar

    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

  2. Fax Contestar

    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

    • SalvaDCH Autor del artículoContestar

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

  3. Senda Contestar

    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

  4. senda Contestar

    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

  5. Juan Manuel Carrillo Campos Contestar

    Hola,
    tengo el error:
    «No se encontró la propiedad o el método getCellRangeByName»
    como puedo resolver esto?
    Saludos cordiales
    Juan Manuel

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *