"Error de ejecución de BASIC. Variable de objeto no establecida"?

Hola.
Estoy usando una macro que he encontrado para ejecutar una función Calc en una Macro. Es esta:

Function FuncionCalc( Nombre As String, datos() )
  ' Esta función permite llamar a una función de Calc por su nombre en Inglés	
	Dim oSFA As Object
	oSFA = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	FuncionCalc = oSFA.callFunction(Nombre,datos())
End Function

La uso para conseguir el número de fila de una celda y la llamo así:

Dim dSuma As integer

dSuma = FuncionCalc("ROW","")

El error me aparece dentro de la función en la línea FuncionCalc = oSFA.callFunction(Nombre,datos())

En principio la función está definida para pasar el nombre de la función calc y los parametros necesarios. Yo la estoy usando con la función ROW(), sin datos. He probado rehaciendo la función sin datos pero me sale lo mismo.

Tengo LibreOffice:
Versión: 6.4.1.2 (x64)
Id. de compilación: 4d224e95b98b138af42a64d84056446d09082932
Subprocs. CPU: 2; SO: Windows 10.0 Build 18363; Repres. IU: predet.; VCL: win;
Configuración regional: es-ES (es_ES); Idioma de IU: es-ES
Calc: CL

Agradecería vuestra ayuda.
Un saludo

No le esas pasando el argumento que requiere la función, necesita al menos una celda para devolverte el valor:

 dSuma  = FuncionCalc("Row", Array(celda))

Toma en cuenta que celda debe ser una referencia valida a una celda. Mira la documentación:
https://wiki.documentfoundation.org/Macros/Basic/Calc/Ranges/es

Por favor, NO te autorespondas, edita tu primer mensaje o usa los comentarios si tienes dudas relacionadas con el mismo tema.
Por favor, dale un correcto seguimiento a tu prgunta.

Entonces, esto debe de funcionar…

Si tienes:

Function Categorizar(row As Long)
	Categorizar = row
End Function

En la hoja de calculo pones:

=CATEGORIZAR(ROW())

descripción de la imagen

Gracias Mauricio por tu respuesta. Pretendo usar la función Row(), es decir, sin pasarle ningún parámetro, simplemente conseguir el número de fila de la celda que está activa. No se puede hacer con la macro usada? Un saludo

Pasale como argumento la celda activa. https://wiki.documentfoundation.org/Macros/Basic/Calc/Ranges/es#Selecci.C3.B3n_actual

Gracias Mauricio. Perdona, te tendría que haber dicho que necesito conseguir el número de fila dentro de una función. Esa función la escribiré en ciertas celdas de mi hoja por lo que la celda activa no me vale o eso creo yo. Cada función en cada celda debe conseguir el número de fila y no sé como hacerlo dado mi bajo nivel de conocimiento (estoy aprendiendo, sorry)

Ahora que lo pienso, si quieres la fila donde esta la celda activa, usas:

row = ThisComponent.CurrentSelection.CellAddress.Row

Es diferente usar funciones dentro de la hoja y dentro de código Basic… por que no anexas mejor un ejemplo para no estar adivinando.

Hola Mauricio. Bueno, estoy aprovechando la cuarentena del coronavirus para aprender un poco de programación para macros, así que no tengo nada elaborado para poder pasar. Estoy tratando de escribir una macro que cada fila de una tabla la pueda categorizar en una serie de apartados. Entonces, por ejemplo, al final de cada fila voy a escribir una función que se llame =CATEGORIZAR(). Esto lo escribiré en la misma columna para cada fila que contenga mi tabla. Dentro de la función CATEGORIZAR necesito saber en qué fila estoy, pues la función es la misma para cada una de las filas. Esto es lo que no consigo hacer. Si uso row = ThisComponent.CurrentSelection.CellAddress.Row no funciona y me devuelve el valor 0. Me imagino que es porque el cursor cuando abro el fichero y ejecuta la función no está definido o activo. En resumen, lo que necesitaría es una forma de conseguir el número de fila para cualquiera de ellas en la que escriba mi función =CATEGORIZAR(). Muchas gracias por tu ayuda

He editado mi respuesssta, si eso es lo que quieres, por favor, marcala como correcta en la palomita.

Muchas gracias Mauricio. Funciona. Es muy simple la solución. Aunque al estar LibreOffice en Español he tenido que usar Fila() en lugar de Row() en la celda. Yo me empeñé en usar soluciones más complejas. Un saludo

Tienes razón, la costumbre de tener todo en ingles, según para mejorarlo, pero no ha funcionado :slight_smile: