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
y si quiero asignar la formula en otra hoja,como sería?
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
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
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
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
Esta publicación tiene 1 reacción esperando moderación...
Evalúa si el contenido de celda1 es uno de los textos a excluir
Saludos :)