[RESUELTO] Como cargar librerias de macros al ejecutarse?

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
JoePublic
Mensajes: 36
Registrado: Dom Sep 06, 2020 5:34 pm

[RESUELTO] Como cargar librerias de macros al ejecutarse?

Mensaje por JoePublic »

TEMA: Como hacer para que al ejecutar una macro, Calc, lea antes todas las funciones de mis librerías que estan en diferentes MODULOS. Como cargar las librerias o funciones de una macro antes de ejecutarse?

Hola,
Tengo un documento con macros almacenadas en 3 librerías dentro de LibreOffice Calc.
Justo cuando ABRO el documento por primera vez y EJECUTO una macro de cualquier libreria me da error diciendo:

"Error. Función no establecidad." o "Error de Ejecución de Basic. Subprocedimiento o procedimiento de función no definido".
y para CORREGIR ese error, debo simplemente abrir el modulo de macros y elegir una macro cualquiera en la pantalla de edicion de macros y ya esta. Al volverlo a ejecutar ya funciona todo bien.

Es decir que dependiendo de la macro que ejecute al abrir por primera vez el archivo CALC, me sale Un error de 'funcion no establecida ' diferente cada vez, bien por que éstas estan en diferentes modulos o librererías.
Y despues, UNA VEZ ABIERTO el archivo CALC y habiendo ejecutado alguna de las macros de mis 3 librerías, si ejecuto cualquier macro, NO SALE ERROR ALGUNO, hasta que cierre el archivo. Y al dia siguiente o al cabo de un rato al abrirlo vuelve a salir el error al ejecutar cualquier macro.

Parece ser que LibreOffice deberia leer todas las funciones de las librerias PREVIAMENTE, antes de ejecutar la macro, pero no lo hace.
¿Que ocurre?. ¿Hay que poner alguna sentencia previa en la macro para que Calc lea antes todas las funciones de mis 3 librerías?
¿Como se hace eso? Alguien me puede ayudar?.
GRACIAS.
Última edición por JoePublic el Mar Sep 07, 2021 10:16 pm, editado 1 vez en total.
Usuario apasionado de las hojas de cálculo. Novato aprendiz de macros con OOo Basic y VBA.
LibreOffice Version: 6.4.3.2 (x64) y Sistema Operativo Windows 10 Home.
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

Re: Como cargar librerias de macros al ejecutarse?

Mensaje por Neftali R »

A ver, si te salta el error al abrir el archivo porque tienes una función que de manera indirecta accede a ThisComponent, entonces no hay solución directa, ya que, según tengo entendido, Calc calcula las formulas antes de cargar el archivo completamente, sin embargo, hay una solución indirecta que "resuelve” el problema.

En primer lugar que hay que activar las referencias iterativas en las opciones; “LibreOffice Calc”, “Calcular”, “Referencias Iterativas”, “Iteraciones”. (esto no sé como se hace en OpenOffice)

Después hay que establecer un Input Opcional que haga referencia a la misma celda en la que está formulada, y en caso de error, que vaya al final donde debería establecer en caso de error, el resultado sea lo mismo que estaba en la celda, ejemplo.

Código: Seleccionar todo

 
Function NPP (Fila As Integer, ["Solución"]Optional OnError As String["/Solución"]) As String
Dim oSheet As Object, oCel As Object, sTmp As String, sCel As String
Dim sFormula As String, pos As Integer, co1 As Integer, tot As Integer
sCel = "E"+Fila
["S"]On Error Goto ErrorFeo:[/"S"]
oCel= ThisComponent.getCurrentController.getActiveSheet.getCellRangeByName (sCel)
sFormula = oCel.getFormula
	If sFormula = "" Then
	sTmp = ""
	Else
	tot = ContarMontos(sFormula)
		If tot = 1 or tot = 0 Then
		sTmp = "PAGO A PROVEEDORES"
		Else
		sTmp = "PAGO A PROVEEDORES("+tot+")"
		End If
	End If
NPP = sTmp
	["S"]If sTmp = "Condición Imposible" Then
		ErrorFeo:
		If IsMissing(OnError) Then
		NPP = "Error, por favor re-calcular"
		Else
		NPP = OnError
		End If
	End If[/"S"]
End Function
Con respecto al problema de que no se cargan las librerías automáticamente, eso es porque LibreOffice solo carga en memoria la librería “Standard” por defecto, pero puedes cargar las otras librerías fácilmente desde el código con:

Código: Seleccionar todo

If GlobalScope.BasicLibraries.isLibraryLoaded("Nombre") Then
	MsgBox "Librería Cargada" 'Obviamente, esto es opcional.
	Else
	GlobalScope.BasicLibraries.loadLibrary("Nombre")
	End If
	O
	If Not(GlobalScope.BasicLibraries.isLibraryLoaded("Nombre")) Then GlobalScope.BasicLibraries.loadLibrary("Nombre")
Para librerías que estén en “Mis Macros y Diálogos” y con:

Código: Seleccionar todo

If BasicLibraries.isLibraryLoaded("Nombre") Then
	MsgBox "Librería Cargada" 'Obviamente, esto es opcional.
	Else
	BasicLibraries.loadLibrary("Nombre")
	End If
	O
	If Not(BasicLibraries.isLibraryLoaded("Nombre")) Then BasicLibraries.loadLibrary("Nombre")
Para librerías que están en el archivo desde el que se ejecuta el macro.
LibreOffice 7.2.6.2 | Windows 7 Ultimate
Avatar de Usuario
JoePublic
Mensajes: 36
Registrado: Dom Sep 06, 2020 5:34 pm

Re: [RESUELTO] Como cargar librerias de macros al ejecutarse

Mensaje por JoePublic »

Muchisimas Gracias Neftali R !!!
Ahora ya se cargan las librerias que estavan en "Mis Macros" junto con la carpeta "Standard", es decir, macros que están archivadas en la aplicacion CALC y no en cada archivo calc, de modo que todos los archivos Calc pueden disfrutar de ellas al ejecutarlas.
Tu recomendación funcionó !!!
If Not(GlobalScope.BasicLibraries.isLibraryLoaded("Nombre")) Then GlobalScope.BasicLibraries.loadLibrary("Nombre")
Usuario apasionado de las hojas de cálculo. Novato aprendiz de macros con OOo Basic y VBA.
LibreOffice Version: 6.4.3.2 (x64) y Sistema Operativo Windows 10 Home.
Responder