Macros de OpenOffice que no funcionan en LibreOffice

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
mddg
Mensajes: 5
Registrado: Mié Nov 16, 2016 4:35 pm
Ubicación: Sevilla (España)

Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mddg »

Buenas noches a la comunidad.

Aprovechar mi primer mensaje en el foro para dar las gracias a todos pues aunque me acabo de registrar soy asiduo y os sigo con devoción pues encuentro frecuentes respuestas a mis dudas y sobre todo a Mauricio por su dedicación y su estupendo manual de OooBasic.

Quería plantearos primero un problema que me ha surgido desde hace poco y no encuentro respuesta por más que rebusco. En mi lugar de trabajo utilizamos OpenOffice y desde que se instaló abandonando MSOffice utilizo Ooobasic para realizar las macros que me facilitan enormemente el trabajo, pero ahora se va a sustituir OpenOffice por LibreOffice lo cual pensaba que no me iba a ocasionar más problema pero he descubierto que los códigos que antes me funcionaba a la perfección no funcionan al hacerlos correr con LibreOffice. Según me parece deducir de los comentarios que he leido hay diferencias entre el Ooobasic de las dos suites.

El error que da es que las variables que defino como públicas antes de main() cuando corren en LibreOffice me da error en los sub siguientes por no estar declaradas.

Agradecería enormemente una solución. Hace algún tiempo recuerdo haber visto un manual de LibreOffice sobre la base del trabajo de Mauricio pero ahora que lo busco no lo encuentro por parte alguna. ¿Podéis indicarme algún manual en el que apoyarme para detectar las posibles diferencias del lenguaje de macros de las dos suites?

Muchas gracias de antemano.
OpenOffice 4.1 en Xubuntu 14
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mauricio »

Hola compañero...

Respecto a Basic, dado que es un lenguaje así, basico, aun no hay muchas diferencias, algunos casos muy concretos pero nada que no se pueda subsanar...

Si anexas un archivo simple donde se vea el problema, intentaremos reproducirlo en nuestros equipos, y claro, si es un fallo de LibreOffice, lo reportamos inmediatamente, que esto es muy importante.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
mddg
Mensajes: 5
Registrado: Mié Nov 16, 2016 4:35 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mddg »

Buenos días Mauricio, muchas gracias por tu pronta respuesta.
Te adjunto pantallazos de los errores que da cuando ejecuto la macro en LibreOffice, tanto al inicio con los enlaces a otro documento como en la ejecución de la macro, ya te comento que en OpenOffice no hay problema alguno, pero con Libre...
Además el código es este:

Código: Seleccionar todo

Option explicit

Dim oDoc As Object
Dim oDocHist As Object
Dim oHoja As Object
Dim oCelda As Object

'Urls
Dim NomCarpeta As String
Dim NomArchivo As String

Dim FechaConsulta As Date
Dim TablaTurnos As Variant

Dim I As Integer
Dim PosicionFecha As Integer

Dim Temporal As Variant

Dim SwSalirPrograma As Boolean
'PROCEDIMIENTO CARGA NOMBRE SUPERVISORES
'	FilaComienzoTurnos =	19	' Fila donde comienzan los turnos o del primer supervisor
'	FilaFinalTurnos = 		53	' Fila donde terminan los turnos o último supervisor

Sub Main()

	'Accedemos a la biblioteca básica de BASIC
	GlobalScope.BasicLibraries.LoadLibrary( "Tools" )

	'Acceso al documento desde donde se llama a esta macro
	oDoc = ThisComponent
		
	'Accedemos a una hoja por su nombre
	oHoja = oDoc.getSheets.getByName("Horarios") 
	oHoja.UnProtect( "" )
	
	SwSalirPrograma = False
	FechaConsulta =  INPUTBOX(" VAMOS A RECUPERAR LOS DATOS DE LOS HORARIOS CORRESPONDIENTES. INTRODUCIR FECHA INICIO DE LA UBICACIÓN. ")   
	PosicionFecha = 2
	oCelda = oHoja.getCellByPosition(PosicionFecha, 7) 'Tomamos la fecha del primer días calculado proceso anterior
	oCelda.Value = FechaConsulta
	For I = 1 To 6 Step 1
		PosicionFecha = PosicionFecha + 1
		oCelda = oHoja.getCellByPosition(PosicionFecha, 7) 'Tomamos la fecha del primer días calculado proceso anterior
		oCelda.Value = FechaConsulta + I
	Next
	PosicionFecha = 2
	oCelda = oHoja.getCellByPosition(PosicionFecha,96) 'Tomamos la fecha del primer días calculado proceso anterior
	oCelda.Value = FechaConsulta
	For I = 1 To 6 Step 1
		PosicionFecha = PosicionFecha + 1
		oCelda = oHoja.getCellByPosition(PosicionFecha, 96) 'Tomamos la fecha del primer días calculado proceso anterior
		oCelda.Value = FechaConsulta + I
	Next
	Call CargaDatosHistoricos
	If SwSalirPrograma = True Then
		Exit Sub
	End If
	
	oHoja = oDoc.getSheets.getByName("Horarios") 
	oHoja.Protect("")
	
	MsgBox "HEMOS FINALIZADO LA CAPTACIÓN DE LOS DATOS DE LOS HORARIOS DE SUPERVISORES Y TELEASISTENTES"
	
End Sub


Sub CargaDatosHistoricos
	Dim UrlSuper As String
	Dim UrlTel As String
	
	Dim I As Integer
	Dim ColumnaDia As Integer

	Call FormaUrls(UrlSuper, UrlTel)
	Call AperturaHistorico(UrlSuper)
	If SwSalirPrograma = True Then
		Exit Sub
	End If
	Call CopiaTurnosSuper()	
	Call AperturaHistorico(UrlTel)
	If SwSalirPrograma = True Then
		Exit Sub
	End If
	Call CopiaTurnosTel()
	

End Sub
Sub PasarAMayusculas(Texto)
  Texto = Ucase(Texto)
End Sub
Sub FormaUrls(UrlSuper, UrlTel)

	
	oCelda = oHoja.GetCellByPosition (2 , 1)
	NomCarpeta = oCelda.String()
	oCelda = oHoja.GetCellByPosition (2 , 2)
	NomArchivo = oCelda.String()
	UrlSuper = NomCarpeta & "\" & NomArchivo & ".xls"
	
	oCelda = oHoja.GetCellByPosition (2 , 4)
	NomCarpeta = oCelda.String()
	oCelda = oHoja.GetCellByPosition (2 , 5)
	NomArchivo = oCelda.String()
	UrlTel = NomCarpeta & "\" & NomArchivo & ".xls"
End Sub

Sub AperturaHistorico(Url)
	
 	Dim sRuta As String
 	Dim mArg()

 	GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
 	
 	On Error Goto ManejoError
 	
    sRuta = ConvertToUrl(Url)	 
 	oDocHist = StarDesktop.loadComponentFromURL( sRuta, "_hidden", 0, mArg() )
 	

	Exit Sub
		ManejoError:	'Sale la linea del programa y ejecuta codigo ManejoError
			'Código para el manejo del error
			Select Case Err
				Case 0
				Case 1
					MsgBox "No ha sido posible abrir el Archivo " & Url & _
					" puede ser que se encuentre en una ubicación distinta o " & _ 
					"tenga un cambio en su nombre. Abrir la carpeta donde se encuentra " & _ 
					"y comprobar su nombre, en caso de haber algún cambio hay que modificar " & _ 
					"la celda C3 o C6 según corresponda."

					SwSalirPrograma = True
				Case 53
					MsgBox "No se encontró la ruta especificada" & Chr(13) & Chr(13) & sRutaArchivo, 48
					SwSalirPrograma = True
				Case 91
					MsgBox "El Archivo " & NomArchivo & " parece ser que se encuentra bloqueado. Para continuar" & _ 
						" el proceso es imprecisdible cerrarlo y volver a activar el proceso"
					SwSalirPrograma = True
				Case Else
					MsgBox "Error en el procedimiento de apertura del archivo. Ocurrió el error numero: " & Err & Chr(13) & Error & _
							Chr(13) & "En la linea " & Erl
					SwSalirPrograma = True
			End Select
			
			On Error Goto 0
	  
End Sub

Sub CopiaTurnosSuper()

	Dim oHoja As Object
	Dim oCelda As Object
	Dim FechaHor As Date

	' CONTADORES HOJA HORARIOS ARCHIVO SUPER
	Dim Col As Integer
	Dim Fil As Integer
	Dim ColumnaDia As Integer
	Dim ColumnaUltimoDia As Integer
	Dim UltColumnaDia As Integer
	Dim FiladeDias As Integer
	Dim FilaComienzoTurnos As Integer
	Dim FilaFinalTurnos As Integer
	Dim TotalColTablaTurnos As Integer
	Dim TotalFilTablaTurnos As Integer
	
	' CONTADORES HOJA HORARIOS 
	Dim ColumnaFinalSuper As Integer
	Dim	FilaFinalSuper 	As Integer 
	Dim I As Integer
	Dim	J As Integer 
	
	Dim Sw As Boolean
	Dim Temporal As String	
	
	'TABLA DE NOMBRES SUPERVISORES
	Dim TablaSuper(0,0) As String
	
	'***********************************PROCEDIMIENTO CARGA NOMBRE SUPERVISORES**********************************************
	oHoja = oDocHist.getSheets.getByName("HORARIO")
	
	FilaComienzoTurnos =	19	' Fila donde comienzan los turnos o del primer supervisor
	FilaFinalTurnos = 		53	' Fila donde terminan los turnos o último supervisor

	Col = 1
	J = -1
	For I = FilaComienzoTurnos To FilaFinalTurnos Step 1
		J = J + 1
		Redim Preserve TablaSuper(J,0)
		oCelda = oHoja.getCellByPosition(Col, I)
		TablaSuper(J,0) = oCelda.String()	
	Next
	
	
	'***********************************PROCEDIMIENTO CARGA DATOS HORARIO SUPERVISORES**********************************************
	Col = 0
	
		ColumnaDia = 8				'Columna del día donde empieza el horario
		UltColumnaDia = 154		'Columna del último día del horario
		FiladeDias = 17				'Fila donde se encuentran las fechas del horario
		FilaComienzoTurnos =	FilaComienzoTurnos	' Fila donde comienzan los turnos o del primer teleasistente
		FilaFinalTurnos = 		FilaFinalTurnos		' Fila donde terminan los turnos o último teleasistente

		Fil = FiladeDias
		oHoja = oDocHist.getSheets.getByName("HORARIO") 
	
		For ColumnaDia = ColumnaDia To UltColumnaDia Step 1
		
			oCelda = oHoja.getCellByPosition(ColumnaDia, Fil)
		
			FechaHor = oCelda.getString()
				
			If FechaConsulta = FechaHor Then
				Exit For
			End If
		Next
		
		TotalColTablaTurnos = 6
		TotalFilTablaTurnos = 250
		Redim Preserve TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
		
		Col = ColumnaDia 
		ColumnaUltimoDia = Col + 6
		
		TotalColTablaTurnos = 0
		For Col = ColumnaDia To ColumnaUltimoDia Step 1	
			TotalFilTablaTurnos = 0
			
			For Fil = FilaComienzoTurnos To FilaFinalTurnos Step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				'Modificacion Ucase
				TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos) = UCase(oCelda.getString())
				'msgbox 	TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
				TotalFilTablaTurnos = TotalFilTablaTurnos + 1
			Next
			TotalColTablaTurnos = 	TotalColTablaTurnos + 1
		Next
		TotalFilTablaTurnos = TotalFilTablaTurnos - 1
		TotalColTablaTurnos = 	TotalColTablaTurnos - 1
		Call CierraDocumento(oDocHist)

		'Acceso al documento desde donde se llama a esta macro
		oDoc = ThisComponent
		oHoja = oDoc.getSheets.getByName("Horarios") 
		
		Col = 2
		Fil = 9
	
		ColumnaFinalSuper = Col + 6
		FilaFinalSuper = TotalFilTablaTurnos + Fil
		
		I = 0
		For Col = Col To ColumnaFinalSuper step 1
			J = 0
			For Fil = Fil To FilaFinalSuper step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				Temporal = TablaTurnos(I,J)
				oCelda.string = TablaTurnos(I,J)
				J = J + 1
			Next
			I = I + 1
			Fil = 9
		Next
		Redim TablaTurnos(0, 0)
		
		Col = 0
		I = 8 ' Uno menos
		For J = 0 To Ubound(TablaSuper()) Step 1
			I = I + 1
			oCelda = oHoja.getCellByPosition(Col, I)
			oCelda.String() = TablaSuper(J,0)	
		Next
		Redim TablaSuper(0,0)
		
		I = I + 1
		oCelda = oHoja.getCellByPosition(Col, I)
		oCelda.String() = "NUM TOTAL TEL."
		
End Sub

Sub CopiaTurnosTel()

	Dim oHoja As Object
	Dim oCelda As Object
	Dim FechaHor As Date

	' CONTADORES HOJA HORARIOS ARCHIVO TELEASISTENTES
	Dim Col As Integer
	Dim Fil As Integer
	Dim ColumnaDia As Integer
	Dim ColumnaUltimoDia As Integer
	Dim UltColumnaDia As Integer
	Dim FiladeDias As Integer
	Dim FilaComienzoTurnos As Integer
	Dim FilaFinalTurnos As Integer
	Dim TotalColTablaTurnos As Integer
	Dim TotalFilTablaTurnos As Integer
	
	' CONTADORES NOMBRES TELEASISTENTES
	
	Dim FilaUltimoNombreManana As Integer
	Dim FilaUltimoNombreTarde As Integer 

	
	' CONTADORES HOJA HORARIOS 
	Dim ColumnaFinalSuper As Integer
	Dim	FilaFinalSuper 	As Integer 
	Dim I As Integer
	Dim	J As Integer 
	
	Dim Sw As Boolean
	Dim Temporal As String	
	
	Dim TablaTel(0,0) As String
	Dim UltRegMan As Integer

	'***********************************PROCEDIMIENTO CARGA NOMBRE TEL. MAÑANA**********************************************
	oHoja = oDocHist.getSheets.getByName("MAÑANA")
	
	Col = 5
	J = -1
	For I = 12 To 202 Step 1 'Desde la fila del primer tel hasta la final del último
		J = J + 1
		Redim Preserve TablaTel(J,0)
		oCelda = oHoja.getCellByPosition(Col, I)
		TablaTel(J,0) = oCelda.String()	
	Next
	UltRegMan = J
	
	'***********************************PROCEDIMIENTO CARGA NOMBRE TEL. TARDE**********************************************
	oHoja = oDocHist.getSheets.getByName("TARDE")
			
	Col = 5
	FilaUltimoNombreTarde = 135
	For I = 12 To FilaUltimoNombreTarde Step 1
		J = J + 1
		Redim Preserve TablaTel(J,0)
		oCelda = oHoja.getCellByPosition(Col, I)
		TablaTel(J,0) = oCelda.String()	
	Next

	'***********************************PROCEDIMIENTO CARGA HORARIO TELEASISTENTES**********************************************	
	
	Col = 0
	
		ColumnaDia = 9 			'Columna del día donde empieza el horario
		UltColumnaDia = 155 		'Columna del último día del horario
		FiladeDias = 10				'Fila donde se encuentran las fechas del horario
		FilaComienzoTurnos =	12	' Fila donde comienzan los turnos o del primer teleasistente
		FilaFinalTurnos = 		202	' Fila donde terminan los turnos o último teleasistente

		Fil = FiladeDias
		oHoja = oDocHist.getSheets.getByName("MAÑANA") 
	
		For ColumnaDia = ColumnaDia To UltColumnaDia Step 1
		
			oCelda = oHoja.getCellByPosition(ColumnaDia, Fil)
		
			FechaHor = oCelda.getString()
				
			If FechaConsulta = FechaHor Then
				Exit For
			End If
		Next
		
		TotalColTablaTurnos = 6
		TotalFilTablaTurnos = 250
		Redim Preserve TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
		
		Col = ColumnaDia 
		ColumnaUltimoDia = Col + 6
		
		TotalColTablaTurnos = 0
		For Col = ColumnaDia To ColumnaUltimoDia Step 1	
			TotalFilTablaTurnos = 0
			
			For Fil = FilaComienzoTurnos To FilaFinalTurnos Step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos) = UCase(oCelda.getString())
				'msgbox 	TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
				TotalFilTablaTurnos = TotalFilTablaTurnos + 1
			Next
			TotalColTablaTurnos = 	TotalColTablaTurnos + 1
		Next
		TotalFilTablaTurnos = TotalFilTablaTurnos - 1
		TotalColTablaTurnos = 	TotalColTablaTurnos - 1
		
		'Acceso al documento desde donde se llama a esta macro
		oDoc = ThisComponent
		oHoja = oDoc.getSheets.getByName("Horarios") 
	

		Col = 2
		Fil = 99
	
		ColumnaFinalSuper = Col + 6
		FilaFinalSuper = TotalFilTablaTurnos + Fil
		
		I = 0
		For Col = Col To ColumnaFinalSuper step 1
			J = 0
			For Fil = Fil To FilaFinalSuper step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				Temporal = TablaTurnos(I,J)
				oCelda.string = TablaTurnos(I,J)
				J = J + 1
			Next
			I = I + 1
			Fil = 99
		Next
	
		Redim TablaTurnos(0, 0)
		
	'***********************************PROCEDIMIENTO CARGA HORARIO TELEASISTENTES DE TARDE**********************************************	
		oHoja = oDocHist.getSheets.getByName("TARDE")	
		
		ColumnaDia = 9 			'Columna del día donde empieza el horario
		UltColumnaDia = 155 		'Columna del último día del horario
		FiladeDias = 10 			'Fila donde se encuentran las fechas del horario
		FilaComienzoTurnos =	12	' Fila donde comienzan los turnos o del primer teleasistente
		FilaFinalTurnos = 		135	' Fila donde terminan los turnos o último teleasistente

		Fil = FiladeDias
		
		oHoja = oDocHist.getSheets.getByName("TARDE") 
		
		For ColumnaDia = ColumnaDia To UltColumnaDia Step 1
		
			oCelda = oHoja.getCellByPosition(ColumnaDia, Fil)
		
			FechaHor = oCelda.getString()
				
			If FechaConsulta = FechaHor Then
				Exit For
			End If
		Next
		
		TotalColTablaTurnos = 6
		TotalFilTablaTurnos = 250
		Redim Preserve TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
		
		Col = ColumnaDia 
		ColumnaUltimoDia = Col + 6
		
		TotalColTablaTurnos = 0
		For Col = ColumnaDia To ColumnaUltimoDia Step 1	
			TotalFilTablaTurnos = 0
			
			For Fil = FilaComienzoTurnos To FilaFinalTurnos Step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos) = Ucase(oCelda.getString())
				'msgbox 	TablaTurnos(TotalColTablaTurnos,TotalFilTablaTurnos)
				TotalFilTablaTurnos = TotalFilTablaTurnos + 1
			Next
			TotalColTablaTurnos = 	TotalColTablaTurnos + 1
		Next
		
		TotalFilTablaTurnos = TotalFilTablaTurnos - 1
		TotalColTablaTurnos = 	TotalColTablaTurnos - 1

		'Acceso al documento desde donde se llama a esta macro
		oDoc = ThisComponent
		oHoja = oDoc.getSheets.getByName("Horarios") 
		
		Col = 2
		Fil = 289 'OJO, CUANDO SE CAMBIEN CAMBIAR TAMBIÉN DENTRO DEL SIGUIENTE FOR (es la fila en GRIS que divide mañana y tarde)
	
		ColumnaFinalSuper = Col + 6
		FilaFinalSuper = TotalFilTablaTurnos + Fil
		
		I = 0
		For Col = Col To ColumnaFinalSuper step 1
			J = 0
			For Fil = Fil To FilaFinalSuper step 1
				oCelda = oHoja.getCellByPosition(Col, Fil)
				Temporal = TablaTurnos(I,J)
				oCelda.string = TablaTurnos(I,J)
				J = J + 1
			Next
			I = I + 1
			Fil = 289 'OJO, CUANDO SE CAMBIEN CAMBIAR TAMBIÉN DENTRO DEL SIGUIENTE FOR (es la fila en GRIS que divide mañana y tarde)
		Next

		Redim TablaTurnos(0, 0)


'*****************************************************	PEGADO DE NOMBRES DE TELEASISTENTES EN HOJA HORARIOS   *******************************				
			'Acceso al documento desde donde se llama a esta macro
		oDoc = ThisComponent
		oHoja = oDoc.getSheets.getByName("Horarios") 
		
		
		
		' PROCEDIMIENTO PEGADO NOMBRES
		Col = 0
		I = 98 ' Uno menos donde comenzamos a imprimir los nombres de los teleasistentes de Mañana
		For J = 0 To UltRegMan Step 1
			I = I + 1
			oCelda = oHoja.getCellByPosition(Col, I)
			oCelda.String() = TablaTel(J,0)	
		Next
	
		Col = 0
		I = 288 ' Uno menos donde comenzamos a imprimir los nombres de los teleasistentes de Tarde
		UltRegMan = UltRegMan + 1
		For J = UltRegMan To Ubound(TablaTel()) Step 1
			I = I + 1
			oCelda = oHoja.getCellByPosition(Col, I)
			oCelda.String() = TablaTel(J,0)	
		Next
		Redim TablaTel(0,0)
		
		I = I + 2
		oCelda = oHoja.getCellByPosition(Col, I)
		oCelda.String() = "NUM TOTAL TEL."
		
		Call CierraDocumento(oDocHist)
		
End Sub




'************************************************
'************************************************
Sub CierraDocumento(oDocObjeto)

     'Cerramos el archivo
     oDocObjeto.close(True)
End Sub 

Este ejemplo que te expongo es una de las macros pero en otras que también he aplicado ocurre errores similares, siempre en Libre y no en Open.

Por cierto en casa trabajo con Xubuntu, pero en el centro de trabajo con Windows 7, no creo que tenga importancia pero por si te sirve de algo.

Mauricio, muchos saludos para ti y para este estupendo foro.
OpenOffice 4.1 en Xubuntu 14
mddg
Mensajes: 5
Registrado: Mié Nov 16, 2016 4:35 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mddg »

No consigo enviarte los pantallazos por el tamaño de las imágenes de todas formas te comento que te adjuntaba pantallazos de cuando inicias el calc tiene enlaces a otro calc y da el error "El siguiente archivo externo no se pudo cargar. Los datos enlazados desde este archivo no se actualizaron".

Los siguientes pantallazos eran para ver el error en la linea 182 "Error de ejecución Basic. Variable de objeto no establecida".
OpenOffice 4.1 en Xubuntu 14
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por PepeOooSevilla »

Hola.

La línea 182 es: oHoja = oDocHist.getSheets.getByName("HORARIO")

La variable oHoja está definida a nivel del procedimiento Sub CopiaTurnosSuper(). Sin problema.

La variable oDocHist está definida a nivel de módulo. Sin problema. El error te está indicando que aún no se le ha asignado ningún valor, luego no apunta a ningún documento Calc y, por tanto, no puede devolver la hoja "HORARIO" a la variable oHoja. Revisa la asignación previa de la variable oDocHist.

Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mauricio »

Como ayuda para tus variables, siempre que las declares de forma global, agregales un prefijo, el que tu quieras, para diferenciarlas de las locales, por ejemplo:

Código: Seleccionar todo

Dim goHoja As Object
Te será más fácil depurar, además, tienes funciones en Basic para validar si una variable esta vacia

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por fornelasa »

mddg, si la macro te funciona normalmente en Calc AOO y la misma macro no funciona en Calc LO el mensaje es claro:
Es incompatibilidad entre estos programas.

La macro que subes es muy larga e implica hacer por aca pruebas de ensayo y error para ver lo que está pasando.

Sugiero, si se puede subir el archivo "real" ejemplo.

Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
mddg
Mensajes: 5
Registrado: Mié Nov 16, 2016 4:35 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mddg »

Buenos días:

Estimados compañeros, me habéis hecho recapacitar y creo que he dado con el problema, pero aun no con la solución.
He buscando la funciones de Basic para validar si una variable esta vacia, aún no he encontrado nada, te agradecería Mauricio me indicases donde buscar, de todas formas sigo buscando en tu libro. Pepe, paisano, tienes razón en que no apunta a ningún documento Calc pues en las instrucciones:

sRuta = ConvertToUrl(Url)
oDocHist = StarDesktop.loadComponentFromURL( sRuta, "_hidden", 0, mArg() )

que se encuentran en el procedimiento Sub AperturaHistorico(Url), Libre no me abre los archivos .xls que le indico que abra, cosa que sí hace Open. Lo he comprobado haciendo copia de los documentos .xls en .ods, de esta forma Libre se ha portado como un campeón y ha realizado el proceso perfectamente.

Conclusión:
En esta organización ahora mismo convivimos con las tres suites (hay compañeros que se niegan a abandonar MSOffice). Con Open no tengo problemas en hacer llamadas a documentos .xls y abrirlos, pero en Libre no se abren, pensaba que es que no los veia abrirse, pero no , no se abren.

¿Pensáis que puede haber alguna razón de que esto ocurra?¿Puede ser algún tipo de incompatibilidad de Libre con MS? Me resulta extraño ya que Open no la tiene.

Saludos, desde la ciudad de la Giralda.
OpenOffice 4.1 en Xubuntu 14
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mauricio »

Para las variables usa: https://help.libreoffice.org/Basic/Vari ... Runtime.5D

si que los abre sin problemas...
foro.png
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por PepeOooSevilla »

Hola.
mddg escribió:En esta organización ahora mismo convivimos con las tres suites (hay compañeros que se niegan a abandonar MSOffice). Con Open no tengo problemas en hacer llamadas a documentos .xls y abrirlos, pero en Libre no se abren, pensaba que es que no los veia abrirse, pero no, no se abren.
Conozco muy bien esa problemática. :crazy:

Si lo comentado por mauricio no te funcionara (puede que la versión que tienes instalada tuviera un bug que fue corregido en una versión posterior. En la versión LibreOffice 5.1.6 estable funciona sin problemas), prueba con:

Código: Seleccionar todo

Option Explicit

Sub AbrirXLS
	Dim DocCalc As Object
	Dim ArchivoXLS As String
	Dim Args(0) As New com.sun.star.beans.PropertyValue

	Args(0).Name  = "FilterName"
	Args(0).Value = "MS Excel 97"

	ArchivoXLS = ConvertToURL("RUTA_AL_ARCHIVO.xls")
	DocCalc = StarDesktop.loadComponentFromURL(ArchivoXLS, "_blank", 0, Args())
End Sub
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
mddg
Mensajes: 5
Registrado: Mié Nov 16, 2016 4:35 pm
Ubicación: Sevilla (España)

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mddg »

Estimados compañeros:

He aplicado los consejos de Mauricio y de Pepe sin resultado pero he descubierto que si en vez de llamar a ese .xls llamo a otro .xls, Libre sí lo abre sin problemas por lo que me ha dado de pensar que es el archivo .xls el que tiene el problema no en si Libre.

El archivo tiene una restricción de solo lectura por lo que he pensado que puede ser este el posible problema, así que esta mañana he abordado al compañero propietario del archivo y me comenta:

- que el no le tiene puesta ninguna restricción de solo lectura, pero el departamento de informática al econtrarnos trabajando en red, es el que le ha asignado a la carpeta completa el atributo de solo lectura.
- que él que trabaja con Excell y tiene realizada sus macros en VBA tiene el mismo problema, para que le funcionen las macros tiene que tener el libro abierto y seleccionada la hoja correspondiente por que si no, la macro no hace nada de nada a pesar de que el le indique el libro y la hoja correspondiente.

Le he enseñado como lo hago con Open y se ha quedado a cuadros. La verdad que me desconcierta el tema, pero cada vez tengo más claro que son temas de los permisos de la red, pero no entiendo la diferencia entre suites más cuando son tan parecidas.

Intentaré hablar con algún compañero de informática a ver si me orienta. Estoy muy agradecido por vuestro interés y por lo que estoy aprendiendo, que ya veo que me hace falta y mucho. :super:

Saludos.
OpenOffice 4.1 en Xubuntu 14
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Macros de OpenOffice que no funcionan en LibreOffice

Mensaje por mauricio »

Se puede validar perfectamente si se tienen permisos de lectura en el archivo especificado... pero... ese es otro tema, creo que el problema original de este tema, esta resuelto...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder